1

ローカリゼーションの問題があります。

私の勤勉な同僚の1人が、アプリケーション全体のすべての文字列を、辞書に含まれている定数に置き換えました。ユーザーが言語を選択すると、その辞書にはさまざまな文字列が配置されます(デフォルトでは英語ですが、ターゲット言語はドイツ語、スペイン語、フランス語、ポルトガル語、北京語、タイ語です)。

この機能のテストでは、ボタンを変更して、スペイン語とArial Unicode MSフォント(アプリケーション全体で使用)の両方で表示されるñ文字のテキストを含める必要がありました。

問題は、プログラムがそれを表示する方法を知らなかったかのように、ñが正方形のブロックとして表示されていることです。ディスクから読み取られている特定の文字列をデバッグすると、デバッガーはその文字を正方形のブロックとしても報告します。

では、失敗はどこにあるのでしょうか。私はそれがいくつかの場所にある可能性があると思います:

1)メモ帳はUnicodeに対応していない可能性があるため、そこに表示されるñはvs2008が期待するものと同じではないため、プログラムは文字を正方形として解釈します(編集:メモ帳はvsと同じ文字を表示します。つまり、両方ともñ。同じ場所で。)

2)vs2008はñを処理できません。信じがたいことです。

3)テキストは正しく読み込まれますが、vs2008のデフォルトのフォントでは表示できません。そのため、デバッガーは正方形を表示します。

4)テキストが正しく読み込まれないため、通常のStreamReader以外のものを使用して文字列を取得する必要があります。

5)テキストは正しく読み込まれますが、C#のデフォルトのStringクラスはñをうまく処理しません。信じがたいことです。

6)私が持っているArial Unicode MSのバージョンには、 http://www.fileinfo.infoによって5万文字の1つとしてリストされているにもかかわらず、ñがありません。

他に私が省略できたものはありますか?

助けてくれてありがとう!

4

7 に答える 7

3

間違いなくメモ帳が原因だと思います。メモ帳はUnicode文字をうまく処理しません。このファイルを手動で編集する場合は、 Unicodeを処理できるNotepad ++などを使用し、ファイルをUTF-8として保存してください。おそらくVSを使用してファイルを編集し、メモ帳やメモ帳++を完全に忘れることができます。.NetとVisualStudioは、実際にはアクセント付き文字の処理に非常に優れています。すべての文字列はデフォルトでUTF-8であるため、問題はほぼ確実にメモ帳にあります。

于 2009-01-10T02:25:20.467 に答える
1

Unicodeの問題をデバッグするための非常に短いガイドがあります。これはデータベースからテキストをフェッチすることを目的としていますが、一般的に同じ原則が適用されます。

最も重要な出発点IMOは、文字列がボックスを表示するだけのときに、実際に文字列に何が含まれているかを知ることです。次のようなコードを使用して、コンテンツをコンソールにダンプします。

static void DumpString (string value)
{
    foreach (char c in value)
    {
        Console.Write ("{0:x4} ", (int)c);
    }
    Console.WriteLine();
}    

次に、unicode.orgのコードチャートで文字を検索します。U + 00F1が必要だと思いますが、コードポイントが異なる別の同様の文字が存在する可能性があります。以前はそれにだまされていました。

于 2009-01-10T07:31:41.657 に答える
1

文字列をどのように読んでいますか?

次のようなテキストファイルを読み込もうとしましたか(エンコーディングをUTF8に設定して):

using(StreamReader sr = new StreamReader(File.Open("file.txt", FileMode.Open), Encoding.UTF8))
{
// add your string to dictionary
}
于 2009-01-10T03:33:35.913 に答える
0

先日、同様の問題が発生していました。System.Windows.Forms.TextBoxにUnicode文字が表示されないを参照してください。TextBoxをRichTextBoxに変更することで修正できました。

于 2009-01-10T02:24:57.113 に答える
0

button.Textプロパティを割り当てるときにString.Formatを使用し、スペイン語のCultureInfoオブジェクトで適切なIFormatProviderを提供してみましたか?

それが効果があるかどうかはわかりませんが、役立つ可能性があります。

于 2009-01-10T02:26:04.800 に答える
0

ソースファイルのエンコーディングが本当に utf-8 であることを確認しましたか? デフォルトの vs2008 インストールには適用できない可能性がありますが、IDE は OS のデフォルト ロケール (またはファイルシステム エンコーディング) を検出し、すべてのファイルに対して一致する非 utf-8 エンコーディングを設定する場合があります。エンコーディングの不一致をテストするために、セットアップを何も変更せずに、二重にエンコードされた混乱 (Web 上でよく見かける) "ñ" を試してみることをお勧めします。

私は、同僚の神が知っている-what-what-editor-in-what-encoding コードで作業するようになったときに、このことに噛みつきました。

すべての API 呼び出しが utf-8 対応であると確信しているため、そうでない場合でもすべてのテキストが utf-8 として解釈されます。

于 2009-01-10T13:51:21.033 に答える
0

スペイン語の文字 (ñ、á、é など) を正しく読み取るには、エンコードにコードページ 1252 を試してみてください。

于 2010-05-31T22:24:01.083 に答える