2011-07-22 8 views
32

Tengo dos cuerdas.¿Qué es este char? 65279 ''

uno es "\" "

y el otro es "\""

creo que son iguales.

Sin embargo, String.Compare dice que son diferentes.

Esto es muy extraño.

Aquí está mi código:

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

que espera que pueda imprimir "GoodCB".

Sin embargo, sólo muestra "B".

En mi depurador, c[0] es 65279 '' y c[1] es 34 '' '' y b[0] es '' ''.

Pero yo no sé qué 65279 '' es.

¿Es un personaje vacío?

+0

¿De dónde viene su cuerda? Probablemente lo estés leyendo mal. – SLaks

+2

Aparece muy comúnmente como el primer caracter en un archivo de texto codificado en utf-16. Use StreamReader, no FileStream. –

Respuesta

50

Es un zero-width no-break space.
Se usa más comúnmente como byte-order mark (BOM).

+1

¿Cómo puedo eliminar ese carácter cuando no puedo estar seguro de si comienza con '' o no? –

+1

Consulte [esta pregunta] (http://stackoverflow.com/questions/1317700/strip-byte-order-mark-from-string-in-c) para la eliminación de la BOM. –

+0

¡Muchas gracias! ¡Estaba golpeando la pared hasta que encontré tu solución! –

3

Si está leyendo desde un archivo que haya abierto en libreta, puede haber añadido, ya que es uno de varios programas notorios para hacerlo.

+0

¿Cómo puedo eliminar ese carácter cuando no puedo estar seguro de si comienza con '' o no? –

+0

El Bloc de notas y otros programas están guardando archivos UTF8, que es un formato válido y común. La lista de materiales solo te molesta cuando lees el archivo con la codificación incorrecta. – SLaks

+0

Quiero determinar si '' existe o no usando c [0] == '' pero no puedo construir esto. –

2

Si está utilizando Notepad ++, intente convertir a UTF-8 (sin BOM), y también asegurarse de que todos los archivos en el proyecto son el mismo formato de sistema de archivos.