⅒という文字をコンソールに表示しようとしたら?になってしまいました。
対策はあるでしょうか。
あります。
一般的なWindows環境では、コンソールは出力エンコーディングがコードページ932つまりシフトJISになっています。
これをUTF-8に変更すれば扱えるようになります。
それには、Console.OutputEncoding = System.Text.Encoding.UTF8;を実行します。
罠の数々 §
- 実はConsole.OutputEncoding = System.Text.Encoding.UTF8;は全ての問題を解決してくれない。コンソールはサロゲートペアに対応していないので、番号が一定以上の文字は全て化ける。サンプルソースでは⅒は上手く行くが💜は上手く行かない
- 💜に相当する文字列は、サロゲートペアに対応したアプリにコピペすると合体して1文字に戻る
参考リンク §
Console.OutputEncoding プロパティ
Console.InputEncoding プロパティ
Console.OutputEncoding プロパティの初期値は何だったのだろうか。上記のリンクから正しい解釈を捜してみよう。
実はコンソールのOutputの他にInputのエンコーディングを変更することができる。どういう時に変更するのだろうか。上記のリンクを辿って考えてみよう。
リポジトリ §
https://github.com/autumn009/cshowto
ConsoleEndoding §
using System;
class Program
{
static void Main()
{
Console.WriteLine("⅒💜");
Console.OutputEncoding = System.Text.Encoding.UTF8;
Console.WriteLine("⅒💜");
}
}
実行結果
???
⅒ ・・