10

(たとえば)Windows GDIを使用してプログラムにテキストを表示しようとしていますが、Unicode文字の一部が疑問符として表示されますか?何が起こってる?

参照:テキストがボックスとして表示されるとはどういう意味ですか?

4

3 に答える 3

9

Windowsでは、Unicode文字を表示しようとしたときに発生する2つの一般的な表示の問題があります。

  1. テキストが疑問符として表示されることがあります

    • これは、Unicodeデータが通常システムコードページを介して8ビット文字セットエンコーディング(または技術的にはマルチバイト文字)に変換されるときに発生します(ただし、他のコードページは変換呼び出しで指定できます)。ターゲットの8ビット文字セットに必要な文字が含まれていない場合、ターゲットの文字セットで表現できない文字は疑問符に変換されます。
  2. テキストがボックスとして表示されることがあります

    • これは、特定の文字のglpyhがないフォントの問題です。ドキュメント内のUnicode文字とフォントでサポートされている文字の間に不一致がある場合にボックスが表示されます。具体的には、ボックスは選択したフォントでサポートされていない文字を表します。
于 2008-10-20T01:05:52.840 に答える
1

これは、UnicodeテキストがどこかでANSIテキストに変換されていることを意味します。Latin-1以外のUnicode文字はANSIに変換できないため、疑問符に変換されます。プログラムがUnicodeサポートでコンパイルされていることを確認してください(つまり、プリプロセッサシンボルUNICODEと_UNICODEがプロジェクトによって#definedされている)。これにより、さまざまなWindows関数の適切なUnicodeバージョンを常に呼び出すことができます。

于 2008-10-20T00:53:31.477 に答える
0

基本的に、あなたはテキストを破壊しました。あるエンコーディングでUnicodeテキストを取得し、ターゲットエンコーディングにソーステキストのすべての文字が含まれていることを確認せずに、別のエンコーディングに変換しました。そうすることで、あなたはたくさんのぎこちないものを手に入れました。

これを行う方法は次のとおりです。

  1. UTF-8テキストをANSIとして扱う(最初に有効なコードページに変換せずに)
  2. コードページに正しい文字が含まれているかどうかを確認せずに、Unicodeテキストをコードページに変換します。
于 2008-10-20T00:53:03.473 に答える