Visual Studio 2019で「Visual Studio デバッグコンソール」への出力の文字化けを直す
コードページ変更方法
注
この記事は Visual Studio 2019 について書いています。
概要
Visual Studio 2019の「ローカルwindowsデバッガー」ターミナルのコードページの変更の仕方についてです。
私の場合デフォルトでは932(=Shift-JIS)になっていました。 これを65001(=utf8)に変えたいです。
- 「ローカルWindowsデバッガー」について
実行時に「Visual Studio デバッグコンソール」という名前のウィンドウで出てくるターミナルです。
Visual Studio 2019で新しいプロジェクトを作成するときにテンプレートで「コンソールアプリ」(C++)を選択すると、 デフォルトで出力ターミナルが「ローカルwindowsデバッガー」になると思います。
続きを読むEasing functionのコード
イージング
調べるといろいろ出るけど、コードだけ見たいならこのサイトが特に無駄な情報がなく実装も簡潔なのでおすすめ。
http://robertpenner.com/easing/
サイト自体は英語ですがCodeと書かれたリンクからGithubに飛べてイージング関数のコードが見れます。
最近注目を浴びてる動画編集業界やWeb業界でたびたびイージングは使われてるらしく、その分日本語記事が多くなっていますね。
がちがちにSEO対策しているサイトよりもこういうサイトの方が見やすくて個人的に好きです。
イージング関数については以下のサイトを見るとわかりやすいです。
PowerShell 7のコードページと$OutputEncodingと[Console]::OutputEncodingについて
背景
PowerShellをバージョン5から7にアップデートして、文字化け問題に悩まされました。
で、文字化けはとりあえず解消できたからいいものの、結局何が原因だったのかはいまいちよくわからない。
とりあえず検証したことをメモとして残しておこうって感じの記事です。
解決法
とりあえず先に解決法を。以下のコマンドで解決しました。
[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding('utf-8')
これをすれば文字化けが治るはずです。chcp 65001
は必要なし。
16進数表記と負数
std::hex
変なことを考えてやたら時間を食ってしまった......
事態はchar型を桁あふれさせたことでした。
char c = 0x89; std::cout << (int)c << '\n' // -119
0x89
は10進数だと137。
char型は最大127までなので、-119が出力されるのはまあよし。
次にこれをstd::hex
で16進表記しようとすると、
char c = 0x89; std::cout << std::hex << (int)c << '\n' // 0xffffff89
んん?
負数表現のためにfがたくさんつくのは良いとして......
「0x89
をchar型に入れてstd::hex
で出力したら0xffffff89
になる」ことにめちゃくちゃ違和感を覚えました。
2の補数で負数を表現しているはずだけど、それだと89が出力されるのがおかしいような......
0x89
は2進数だと0000 0000 0000 0000 0000 0000 1000 1001
。
これの2の補数は1111 1111 1111 1111 1111 1111 0111 0111
で、これが16進数だと0xffffff77
。
「0xffffff89
じゃなくて正しくは0xffffff77
なんじゃないの?」と思ってしまいました。
当然この考察は間違いだったわけです。
そもそもchar型に代入してる時点で0x89
は137ではなく-119として扱われています。
言うまでもなく137と-119は別物。
-119は補数表現的に考えると「119を足して0になる値」なので、
0000 0000 0000 0000 0000 0000 0111 0111
(119)の2の補数1111 1111 1111 1111 1111 1111 1000 1001
(-119)が出力されるものとして正しかったです。
16進数に直すと0xffffff89
ですね。一件落着。
こんなのにやたらと考え込んでしまった...
ブログをはじめました
最近はやっているはてなブログというのをはじめてみました。
デザインがわかりやすくていいですね。
特に誰かと競い合って研鑽するつもりはなく、ゆっくりといろいろなことを書き残していけたらなと思っています。