Tenho uma sequência que recebo de um aplicativo de terceiros e gostaria de exibi-la corretamente em qualquer idioma usando C # no Windows Surface.
Devido à codificação incorreta, um pedaço da minha string fica assim em espanhol:
Acción
considerando que deve ficar assim:
Acción
De acordo com a resposta desta pergunta: Como saber a codificação de string em C # , a codificação que estou recebendo já deve estar no UTF-8, mas é lida em Encoding.Default (provavelmente ANSI?).
Estou tentando transformar essa string em UTF-8 real, mas um dos problemas é que só consigo ver um subconjunto da classe Encoding (somente propriedades UTF8 e Unicode), provavelmente porque estou limitado à API de superfície do Windows.
Eu tentei alguns trechos que encontrei na internet, mas nenhum deles foi bem-sucedido até agora para os idiomas do leste (ou seja, coreano). Um exemplo é o seguinte:
var utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(myString);
myString= utf8.GetString(utfBytes, 0, utfBytes.Length);
Eu também tentei extrair a string em uma matriz de bytes e, em seguida, 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);
Vocês têm outras idéias que eu poderia tentar?
Encoding.Default
retornam a página de código ANSI do sistema.Respostas:
Como você sabe que a string está chegando,
Encoding.Default
você pode simplesmente usar:Outra coisa que você deve lembrar: Se você estiver usando o Console.WriteLine para produzir algumas strings, também deverá escrever
Console.OutputEncoding = System.Text.Encoding.UTF8;
!!! Ou todas as strings utf8 serão exibidas como gbk ...fonte
Encoding.GetEncoding(...)
; você precisará encontrar o nome da codificação real que foi usada incorretamente na outra extremidade.myString
é mojibake. O código primeiro desfaz a decodificação incorreta e depois a decodificação correta. Funciona desde que a decodificação incorreta não tenha perdido dados. Mas, como o @SLaks apontou, seria melhor usar a codificação exata que estava errada. (Melhor nomes e comentários no código ajudaria na compreensão de como código de muito errado com aparência é na verdade uma tentativa de fazer direito.)A saída deve se parecer com
chamar DecodeFromUtf8 ();
fonte
Seu código está lendo uma sequência de bytes codificados em UTF8 e decodificando-os usando uma codificação de 8 bits.
Você precisa corrigir esse código para decodificar os bytes como UTF8.
Como alternativa ( não ideal ), você pode converter a sequência incorreta de volta na matriz de bytes original - codificando-a usando a codificação incorreta - e decodificando novamente os bytes como UTF8.
fonte
fonte
Se você deseja salvar qualquer string no banco de dados mysql, faça o seguinte: ->
A estrutura do campo do banco de dados i phpmyadmin [ou qualquer outro painel de controle] deve ser definida como utf8-gerneral-ci
2) você deve alterar sua string [Ex. textbox1.text] para byte, portanto
2-1) define byte [] st2;
2-2) converta sua string [textbox1.text] em unicode [mmultibyte string]:
3) execute este comando sql antes de qualquer consulta:
3-2) agora você deve inserir esse valor em, por exemplo, campo de nome:
4) o principal trabalho que muitas soluções não deram atenção a ela é a linha abaixo: você deve usar addwithvalue em vez de add no parâmetro de comando como abaixo:
++++++++++++++++++++++++++++++++++ Aproveite os dados reais no servidor de banco de dados em vez de ????
fonte
Use o trecho de código abaixo para obter bytes do arquivo csv
Ligue para o abaixo e salve-o como um anexo
fonte