2011-07-22 11 views
32

私は2つの弦を持っています。この文字は何ですか? 65279 ''

一つは、 "\" "

あり、他方は、私は、彼らが同じであることを考える "\""

です。

しかし、String.Compareは、彼らが異なっていると言います。

これは非常に奇妙です。ここで

は私のコードです:

string b = "\""; 
string c = "\""; 

if (string.Compare(b, c) == 0) 
{ 
    Console.WriteLine("Good"); 
} 

if (c.StartsWith("\"")) 
{ 
    Console.WriteLine("C"); 
} 

if (b.StartsWith("\"")) 
{ 
    Console.WriteLine("B"); 
} 

私はそれが "GoodCB" を印刷することができることを期待しました。

ただし、「B」のみが印刷されます。

私のデバッガではc[0]は65279 ''、c[1]は34 '' ''、b[0]は '' 'です。

しかし、私は65279は「」であるかわかりません。

空の文字ですか?

+0

あなたの文字列は何から来ていますか?おそらくそれを間違って読んでいるでしょう。 – SLaks

+2

これはutf-16でエンコードされたテキストファイルの最初の文字として非常によく見られます。 FileStreamではなくStreamReaderを使用します。 –

答えて

50

それはzero-width no-break spaceです。
これは、より一般的にはbyte-order mark (BOM)として使用されています。

+1

''で始まるかどうかわからないときに、その文字を削除するにはどうしたらいいですか? –

+1

BOMの削除については、[この質問](http://stackoverflow.com/questions/1317700/strip-byte-order-mark-from-string-in-c)を参照してください。 –

+0

ありがとうございました!私はあなたの解決策を見つけるまで壁に当たっていた! –

3

あなたがメモ帳で開いているファイルから読んでいるなら、それはそうすることで悪名高い、いくつかのプログラムの一つであるとして、それを追加したことがあります。

+0

''で始まるかどうかわからないときに、どのようにしてその文字を削除できますか? –

+0

メモ帳やその他のプログラムはUTF8ファイルを保存しています。これは有効かつ一般的な形式です。 BOMは、間違ったエンコーディングでファイルを読むときにだけ気にします。 – SLaks

+0

私は ''が存在するかどうかをc [0] == ''で判別したいが、これを構築することはできない。 –

2

あなたが++メモ帳を使用している場合は、UTF-8(BOMなし)に変換してみてください、そしてまた、プロジェクト内のすべてのファイルが同じファイルシステムフォーマットであることを確認してください。

関連する問題