一部のWindows 10ビルド(2018年4月以降のインサイダーおよび「通常」1903)には、「ベータ版:世界的な言語サポートにUnicode UTF-8を使用する」という新しいオプションがあります。
このオプションを表示するには、[設定]に移動し、[すべての設定]-> [時間と言語]-> [言語]-> [管理言語設定]を選択します。
これは次のようになります。
このチェックボックスをオンにすると、以下の不規則性が観察されますこのチェックボックスの機能と以下の理由を知りたい。
Visual Studio 2019で新しいWindowsフォームアプリケーションを作成します。メインフォームで、次のようにPaint
偶数ハンドラーを指定します。
private void Form1_Paint(object sender, PaintEventArgs e)
{
Font buttonFont = new Font("Webdings", 9.25f);
TextRenderer.DrawText(e.Graphics, "0r", buttonFont, new Point(), Color.Black);
}
プログラムを実行します。チェックボックスがオフの場合は次のようになります。
ただし、チェックボックスをオンにすると(要求されたとおりに再起動すると)、次のように変わります。
ウィキペディアで Webdings フォントを検索できます。指定された文字テーブルによると、これらの2つの文字のコードは"\U0001F5D5\U0001F5D9"
です。 "0r"
の代わりにそれらを使用すると、チェックボックスがチェックされていると機能しますが、チェックボックスがチェックされていないなしようになりましたこの:
alwaysが機能し、ボックスがチェックされているかどうかに関係なく機能する解決策を見つけたいと思います。
これはできますか?
ほとんどのWindows C APIには、2つの異なるバリアントがあります。
Microsoftの公式なアドバイスは、「A」バージョンを使用することではなく、コードが常に「W」バリアントを使用するようにすることです。そうすれば、ユーザーの国/言語がどのように構成されていても、一貫した動作が得られるはずです。
ただし、そのチェックボックスは複数のことを実行しているようです。 「ANSIコードページ」を65001に変更する必要があることは明らかです。これはUTF-8を意味します。フォントのレンダリングもよりユニコディに変化しているようです。
GetACP() == 65001 であるかどうかを検出してから、Unicodeバージョンの文字列を描画します。それ以外の場合は、古い「0r」バージョンを描画します。 .NETからそれを行う方法はわかりません...