Eu pesquisei sobre esse assunto no Google e olhei todas as respostas, mas ainda não entendi.
Basicamente, preciso converter a string UTF-8 em ISO-8859-1 e faço isso usando o seguinte código:
Encoding iso = Encoding.GetEncoding("ISO-8859-1");
Encoding utf8 = Encoding.UTF8;
string msg = iso.GetString(utf8.GetBytes(Message));
Minha string fonte é
Message = "ÄäÖöÕõÜü"
Mas, infelizmente, minha string de resultado se torna
msg = "�ä�ö�õ�ü
O que estou fazendo de errado aqui?
Encoding.Unicode
API Win32. Unicode é um conjunto de caracteres, não uma codificação. UTF-16 é uma das várias codificações para Unicode.)Message
foi decodificado de UTF-8. Assumindo que essa parte funcionou corretamente, a conversão para o Latin-1 é tão simples quantobyte[] bytes = Encoding.GetEncoding("ISO-8859-1").GetBytes(Message)
. Então, como StuS diz, você pode converter os bytes Latin-1 de volta para UTF-16 comEncoding.GetEncoding("ISO-8859-1").GetString(bytes)
Respostas:
Use Encoding.Convert para ajustar a matriz de bytes antes de tentar decodificá-la em sua codificação de destino.
fonte
Encoding.GetEncoding("ISO-8859-1").GetString(Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("ISO-8859-1"), Encoding.UTF8.GetBytes(myString)))
Acho que seu problema é que você assume que os bytes que representam a string utf8 resultarão na mesma string quando interpretados como outra coisa (iso-8859-1). E isso simplesmente não é o caso. Recomendo que você leia este excelente artigo de Joel spolsky.
fonte
Experimente isto:
fonte
Você precisa consertar a origem da corda em primeiro lugar.
Uma string no .NET é, na verdade, apenas uma matriz de pontos de código Unicode de 16 bits, caracteres, portanto, uma string não está em nenhuma codificação específica.
É quando você pega essa string e a converte em um conjunto de bytes que a codificação entra em ação.
Em qualquer caso, a maneira como você fez, codificar uma string em uma matriz de bytes com um conjunto de caracteres e depois decodificá-la com outro, não funcionará, como você pode ver.
Você pode nos contar mais sobre de onde vem a string original e por que você acha que foi codificada incorretamente?
fonte
Parece um código um pouco estranho. Para obter a string do fluxo de bytes Utf8, tudo o que você precisa fazer é:
Se você precisar salvar o fluxo de bytes iso-8859-1 em algum lugar, basta usar: linha de código adicional para anterior:
fonte
Acabei de usar a solução do Nathan e funciona bem. Eu precisava converter ISO-8859-1 para Unicode:
fonte
fonte
Aqui está um exemplo para ISO-8859-9;
fonte