2020年11月29日
川俣晶の縁側ソフトウェアC# コーディング How To total 1355 count

【入門級】コンソールに表示できない文字を表示可能にする (制約あり)

Written By: 川俣 晶連絡先

 ⅒という文字をコンソールに表示しようとしたら?になってしまいました。

 対策はあるでしょうか。

 あります。

 一般的な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("⅒💜");

    }

}

実行結果

???

⅒ ・・

COOL C# CREW

C#ハウツー連載の解説増量、カラーのソース、新規書き下ろし追加の読みやすい単行本はこちら。

C#ハウツー: 逆引き入門・こんな機能はどう書くの?