Tengo una cadena que recibo de una aplicación de terceros y me gustaría mostrarla correctamente en cualquier idioma usando C # en mi Windows Surface.
Debido a una codificación incorrecta, una parte de mi cadena se ve así en español:
Acción
mientras que debería verse así:
Acción
De acuerdo con la respuesta a esta pregunta: Cómo saber la codificación de cadenas en C # , la codificación que estoy recibiendo ya debería estar en UTF-8, pero se lee en Codificación. Predeterminado (¿probablemente ANSI?).
Estoy tratando de transformar esta cadena en UTF-8 real, pero uno de los problemas es que solo puedo ver un subconjunto de la clase de codificación (solo propiedades UTF8 y Unicode), probablemente porque estoy limitado a la API de superficie de Windows.
He probado algunos fragmentos que he encontrado en Internet, pero ninguno de ellos ha tenido éxito hasta ahora para los idiomas orientales (es decir, coreano). Un ejemplo es el siguiente:
var utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(myString);
myString= utf8.GetString(utfBytes, 0, utfBytes.Length);
También intenté extraer la cadena en una matriz de bytes y luego usar UTF8.GetString:
byte[] myByteArray = new byte[myString.Length];
for (int ix = 0; ix < myString.Length; ++ix)
{
char ch = myString[ix];
myByteArray[ix] = (byte) ch;
}
myString = Encoding.UTF8.GetString(myByteArray, 0, myString.Length);
¿Ustedes tienen alguna otra idea que pueda probar?
Encoding.Default
devuelve la página de códigos ANSI del sistema.Respuestas:
Como saben, la cadena está entrando, ya
Encoding.Default
que simplemente podría usar:Otra cosa que quizás tenga que recordar: si está utilizando Console.WriteLine para generar algunas cadenas, ¡también debe escribir
Console.OutputEncoding = System.Text.Encoding.UTF8;
! O todas las cadenas utf8 serán superadas como gbk ...fuente
Encoding.GetEncoding(...)
; necesitará encontrar el nombre de la codificación real que se usó incorrectamente en el otro extremo.myString
es mojibake. El código primero deshace la decodificación incorrecta y luego realiza la decodificación correcta. Funciona siempre que la decodificación incorrecta no haya perdido datos. Pero como señaló @SLaks, sería mejor usar la codificación exacta que estaba mal. (Los mejores nombres y comentarios en el código ayudarían a comprender cómo un código que se ve muy mal en realidad es un intento de hacer lo correcto.)La salida debería verse como
llame a DecodeFromUtf8 ();
fuente
Su código lee una secuencia de bytes codificados en UTF8 y los decodifica con una codificación de 8 bits.
Debe corregir ese código para decodificar los bytes como UTF8.
Alternativamente ( no ideal ), puede convertir la cadena incorrecta de nuevo a la matriz de bytes original, codificándola con la codificación incorrecta, y luego volver a decodificar los bytes como UTF8.
fuente
fuente
Si desea guardar cualquier cadena en la base de datos mysql, haga esto: ->
La estructura de campo de su base de datos i phpmyadmin [o cualquier otro panel de control] debe establecerse en utf8-gerneral-ci
2) debes cambiar tu cadena [Ej. textbox1.text] a byte, por lo tanto
2-1) define el byte [] st2;
2-2) convierta su cadena [textbox1.text] a unicode [cadena de mmultibyte] por:
3) ejecute este comando sql antes de cualquier consulta:
3-2) ahora debe insertar este valor en, por ejemplo, el campo de nombre:
4) el trabajo principal al que muchas soluciones no le prestaron atención es la siguiente línea: debe usar addwithvalue en lugar de agregar el parámetro de comando como a continuación:
++++++++++++++++++++++++++++++++++ disfrutan de datos reales en su servidor de base de datos en lugar de ????
fuente
Use el fragmento de código a continuación para obtener bytes del archivo csv
Llame al siguiente y guárdelo como un archivo adjunto
fuente