2010-11-11 12 views
6

¿Cuál es la codificación interna de las aplicaciones .NET (por ejemplo, objetos de cadena) ¿Puedo definir qué codificación debería usar mi aplicación? Si escribo una cadena .net en un archivo. ¿Qué codificación tiene la cadena?.NET internal Encoding

// editar

Dim test as String="Das ist ein Test" <---what Encoding has this String? 

Dim reader as New IO.StreamReader(docPath, _ 
    System.Text.Encoding.GetEncoding("shift-jis")) 

test=reader.ReadToEnd() <---and now? What Encoding has this String? 

Gracias!

Respuesta

5
Dim test as String="Das ist ein Test" <---what Encoding has this String? 

UTF-16

Dim reader as New IO.StreamReader(docPath, 
    System.Text.Encoding.GetEncoding("shift-jis")) 
test=reader.ReadToEnd <---and now? What Encoding has this String? 

Todavía UTF-16. La clase StreamReader examina los bytes en docPath y los convierte a UTF-16 en función de la codificación shift-jis.

+0

+1 para ver directamente el código del OP y para obtener información sobre StreamReader. –

1

Internamente .NET utiliza Unicode - ACTUALIZADO - UTF-16.

Sin embargo, si escribe la cadena en un archivo, debe proporcionar una codificación. Si no lo hace, .NET elegirá una codificación para usted; generalmente es UTF8. Aquí se reflectored File.WriteAllText:

public static void WriteAllText(string path, string contents) 
{ 
    if (path == null) 
    { 
     throw new ArgumentNullException("path"); 
    } 
    if (path.Length == 0) 
    { 
     throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath")); 
    } 
    InternalWriteAllText(path, contents, StreamWriter.UTF8NoBOM); 
} 
+1

En realidad, son 2 bytes por punto de código, no por carácter. Las cosas como los acentos pueden ser puntos de código separados, pero pueden imprimirse como parte del mismo personaje. Además, usa UTF-16, lo que significa que un punto de código puede * potencialmente * ser de 4 bytes, aunque en la práctica nadie usa nada fuera del plano multilingüe básico. –

+0

En realidad, es de 2 bytes por unidad de código, no de código :-) Los puntos de código anteriores U + FFFF requieren 2 unidades de código en UTF-16 (y usuario .NET UTF-16). –

3

System.String es UTF-16. Puede convertir eso a varias otras codificaciones utilizando derivados de la clase System.Text.Encoding.

En respuesta a la edición: System.IO.StreamReader, por lo que yo sé, trata de "adivinar" en cuanto a la codificación correcta, si no se especifica uno. System.IO.StreamWriter escribe como UTF-8, IIRC. Estoy menos familiarizado con estas clases, así que tome esa información bajo su propio riesgo;)

2

Como todas las demás respuestas: sí, 2 bytes Unicode (UTF-16). Y sí, puede controlar cómo escribe en el disco, como describe @Billy ONeal.

Con respecto a su pregunta si es posible controlar esto: No, esto no es posible. .NET siempre se ejecutará en Unicode UTF-16 internamente. No hay configuraciones para esto.

+0

+1 por falta de capacidad de cambio de System.String. –

+0

Muchas gracias :). –