Estoy tratando de escribir una cadena UTF-8 (vietnamita) en la consola C# pero no lo conseguí. Estoy corriendo en Windows 7.Personaje vietnamita en .NET Console Application (UTF-8)
He intentado utilizar la clase Encoding
que convierten a string
char[]
a byte[]
y luego a cadena, pero sin ayuda, la cadena es de entrada directamente desde la base de datos.
Aquí es un poco de ejemplo
Tôi tên là Đức, Cuoc canción que VUI VE Tuyết Voi
No muestra el carácter especial como Đ
o ứ
... en cambio, muestran hasta ?
, mucho peor que con la clase de Codificación.
¿Alguien puede probar esto o saber acerca de este problema?
Mi código
static void Main(string[] args)
{
XDataContext _new = new XDataContext();
Console.OutputEncoding = Encoding.GetEncoding("UTF-8");
string srcString = _new.Posts.First().TITLE;
Console.WriteLine(srcString);
// Convert the UTF-16 encoded source string to UTF-8 and ASCII.
byte[] utf8String = Encoding.UTF8.GetBytes(srcString);
byte[] asciiString = Encoding.ASCII.GetBytes(srcString);
// Write the UTF-8 and ASCII encoded byte arrays.
Console.WriteLine("UTF-8 Bytes: {0}", BitConverter.ToString(utf8String));
Console.WriteLine("ASCII Bytes: {0}", BitConverter.ToString(asciiString));
// Convert UTF-8 and ASCII encoded bytes back to UTF-16 encoded
// string and write.
Console.WriteLine("UTF-8 Text : {0}", Encoding.UTF8.GetString(utf8String));
Console.WriteLine("ASCII Text : {0}", Encoding.ASCII.GetString(asciiString));
Console.WriteLine(Encoding.UTF8.GetString(utf8String));
Console.WriteLine(Encoding.ASCII.GetString(asciiString));
}
y aquí está la salida excepcional
Nhà báo đi hội báo Xuân
UTF-8 Bytes: 4E-68-C3-A0-20-62-C3-A1-6F-20-C4-91-69-20-68-E1-BB-99-69-20-62-C3-
A1-6F-20-58-75-C3-A2-6E
ASCII Bytes: 4E-68-3F-20-62-3F-6F-20-3F-69-20-68-3F-69-20-62-3F-6F-20-58-75-3F-
6E
UTF-8 Text : Nhà báo đi hội báo Xuân
ASCII Text : Nh? b?o ?i h?i b?o Xu?n
Nhà báo đi hội báo Xuân
Nh? b?o ?i h?i b?o Xu?n
Press any key to continue . . .
Ajuste de la codificación de salida a UTF8 debería funcionar: 'Console.OutputEncoding = Encoding.UTF8 '. ¿Estás seguro de que el problema no proviene de la forma en que estás leyendo el texto de la base de datos? Si coloca un punto de interrupción en su código, ¿'srcString' está codificado correctamente? –
sí, la salida del punto de interrupción es 100% correcta. Estoy considerando cambiar a la forma de Windows pero no necesito esa característica tan elegante en este caso. :(demasiado malo para WinConsole – DucDigital