5

問題トラッカーで、顧客の 1 人が 1 つのテキストが不完全であるというバグを報告しているというチケットを見つけました! 1 つのレガシー システム (IBM AS400) から最新のシステムへのテキスト変換プログラムがあります。追跡したところ、コードに未知の動作が見つかりました!!

最初にこれを見てください: バグだらけの状態

ご覧のとおり、最初のスペース (char32) の前に 2 つの文字がありますが、削除するTrim()と、結果は次のようになります。

バグのない状態

はい、Trim()最初から char160 を削除します! Trim()必要以上に機能すること が起こったのは何ですか?注:両方の写真は同じテスト状態でキャプチャされています。

4

3 に答える 3

16

160 は NBSP (非改行スペース) であり、ドキュメントによると、Trimすべての空白が削除されます。160 は、Unicode では空白として分類されます。

代わりに電話した方がいいかもしれませんTrim(' ')

于 2012-06-05T08:16:27.603 に答える
4

Trim()先頭と末尾の空白文字を削除します。これは、まさに本来の動作です

char 160 は非改行スペースであり、削除する空白文字の 1 つです。

于 2012-06-05T08:16:43.663 に答える
2

トリムは、スペースだけでなく、すべての空白を削除します。char 160 がコード ページ 1256 の空白である場合、Trim はそれを削除します。

次のコードは、32 と 160 がコードページ 1256 の空白であることを示しています。

        var chars = new byte[] {32,160,164 };
        var enc=Encoding.GetEncoding(1256);
        var str=enc.GetString(chars);
        foreach (var character in str)
        {
            Console.WriteLine("{0}:{1}", character, Char.IsWhiteSpace(character));
        }
        Console.ReadKey();

戻り値:

       True
       True
       False
于 2012-06-05T08:19:48.650 に答える