1

テキストエディタを使用して、特定のソースコードをコピーしてプログラムに貼り付けました。基本的にソースコードが「intmain()」で始まることを確認する必要があるので、先に進んで「int main()」と行を比較しましたが、比較では常にfalseが返されました。

文字列を文字に分解して、何か変なものを見つけました。

ここに画像の説明を入力してください

したがって、文字列行には、テキストエディタ内に貼り付けられたテキストである「intmain()」が渡されます。aとbは同じ文字であると思うかもしれませんが、そうではありません。

ここに画像の説明を入力してください

正直なところ、最初の引用符はどこから来ているのかわかりません。元の文字列にはそれが含まれていなかったため、デバッガーには表示されません(それ以外の場合は、「\ "intmain()\"」が表示されます)。ここで何が起きてるの?

編集:line = line.Trim()を試しました。それでもそのキャラクターは消えていません。どうやらそれはゼロ幅のノーブレークスペースのためのいくつかの特別なユニコード文字です。これを文字列から削除するにはどうすればよいですか?

4

4 に答える 4

2

65279はUTF-16BOM(U + FEFF)の10進表現のように見えますが、データを「行」に読み込む方法でデータを削除できなかった可能性はありますか?

于 2012-10-15T04:20:08.520 に答える
1

どのように設定lineされline.Trim(); ているかを見ずに、何が起こっているのかを判断するのは難しいlineです。

BOM文字に基づいて更新:.NET4line.Trim(new char[]{'\uFEFF'});を想定してみてください

于 2012-10-15T04:19:13.030 に答える
0

私は解決策を見つけました:

private readonly string BYTE_ORDER_MARK_UTF8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());

...

if (line.StartsWith(BYTE_ORDER_MARK_UTF8))
                line = line.Remove(0, BYTE_ORDER_MARK_UTF8.Length);

それは奇妙だった...

于 2012-10-15T04:36:17.637 に答える
-1

あなたが投稿したそのコードでは、line変数がスペース文字で始まっているようです。試すline = line.Trim();

編集:

string.Trim()メソッドが期待どおりに機能しない理由は、MSDNで確認できます。

.NET Framework 4以降、このメソッドはすべてのUnicode空白文字(つまり、Char.IsWhiteSpaceメソッドに渡されたときに真の戻り値を生成する文字)をトリミングします。この変更により、.NET Framework 3.5 SP1以前のバージョンのTrimメソッドは、のTrimメソッドの2つの文字、ZERO WIDTH SPACE(U + 200B)とZERO WIDTH NO-BREAK SPACE(U + FEFF)を削除します。 NETFramework4以降のバージョンは削除されません。

(U+FEFF)の冒頭のキャラクターのようですlineので、なぜそれTrimを扱っていないのですか。

于 2012-10-15T04:15:10.517 に答える