2011-07-22 8 views
32

Mam dwa ciągi.Co to za znak? 65279 ''

jest "\" "

a druga jest "\""

myślę, że są one takie same.

Jednak String.Compare mówi, że są różne.

To bardzo dziwne.

Oto mój kod:

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"); 
} 

Spodziewałem się, że może to print "GoodCB".

Jednak drukuje tylko "B".

W moim debugerze c[0] to 65279 '', a c[1] to 34 '"', a b[0] to" "".

Ale nie wiem, co to jest 65279 ".

Czy to jest pusta postać?

+0

Z czego pochodzi Twój ciąg? Prawdopodobnie czytasz to źle. – SLaks

+2

Bardzo często pojawia się jako pierwszy znak w zakodowanym pliku tekstowym utf-16. Użyj StreamReader, a nie FileStream. –

Odpowiedz

50

To jest zero-width no-break space.
Jest to bardziej powszechnie używane jako byte-order mark (BOM).

+1

Jak mogę usunąć ten znak, gdy nie wiem, czy zaczyna się od znaku "" czy nie? –

+1

Zobacz [to pytanie] (http://stackoverflow.com/questions/1317700/strip-byte-order-mark-from-string-in-c) w celu usunięcia BOM. –

+0

Dziękuję bardzo! Uderzyłem w ścianę, dopóki nie znalazłem twojego rozwiązania! –

3

Jeśli czytasz z pliku, który otworzyłeś w notatniku, mógł go dodać, ponieważ jest to jeden z kilku programów znanych z tego.

+0

Jak mogę usunąć ten znak, gdy nie wiem, czy zaczyna się od znaku "" czy nie ". –

+0

Notatnik i inne programy zapisują pliki UTF8, który jest prawidłowym i powszechnym formatem. BOM przeszkadza Ci tylko, gdy czytasz plik z niewłaściwym kodowaniem. – SLaks

+0

Chcę określić, czy "istnieje, czy nie, używając c [0] ==" ", ale nie mogę tego zbudować. –

2

Jeśli korzystasz z Notepad ++, spróbuj konwertować do UTF-8 (bez BOM), a także upewnij się, że WSZYSTKIE twoje pliki w projekcie mają ten sam format systemu plików.