asp.net converter arquivos ISO-8859 para utf-8

votos
1

Eu preciso converter um arquivo CSV de iso para UTF-8 para manter os acentos no banco de dados.

sotaque francês (E, E, E, e similares) não são mantidos quando tento traduzi-los para UTF-8, eles são alterados para ?.

Estou perplexo.

Eu uso a seguinte função para a tradução:

public static string iso8859ToUnicode(string src) {

        Encoding iso = Encoding.GetEncoding(iso8859-1);

        Encoding unicode = Encoding.UTF8;        

        byte[] isoBytes = iso.GetBytes(src);

        byte[] unibytes = Encoding.Convert(iso,unicode,isoBytes);

        char[] unichars = new char[iso.GetCharCount(unibytes,0,unibytes.Length)];

        unicode.GetChars(unibytes,0,unibytes.Length,unichars,0);

        return new string(unichars);

    }

Mas não parecem funcionar bem. Socorro?

Publicado 22/04/2009 em 14:10
fonte usuário
Em outras línguas...                            


3 respostas

votos
0

que você pode estar perdendo sua codificação quando você declara a nova cadeia, ou quando você armazenar os dados na matriz de char

Respondeu 22/04/2009 em 14:14
fonte usuário

votos
0

Em vez do GetChars()método, você não pode simplesmente chamá

unicode.GetString(unibytes);
Respondeu 22/04/2009 em 14:23
fonte usuário

votos
5

Eu suspeito fortemente que a sua seqüência original não tem os valores corretos. Meu palpite é que você lê-lo a partir do arquivo como se fosse UTF-8.

Para converter entre duas codificações, você não deve ter a cadeia no primeiro lugar - você deve, basicamente, carregar os bytes do arquivo e chamar Encoding.Convert()assim. Alternativamente, carregar o arquivo usando ISO-Latin-1 e apenas guardá-lo como UTF-8. Por exemplo:

public static void ConvertLatin1ToUtf8(string inputFile, string outputFile)
{
    Encoding latin1 = Encoding.GetEncoding(28591);
    string text = File.ReadAllText(inputFile, latin1);
    File.WriteAllText(outputFile, text, Encoding.UTF8);
}

ou

public static void ConvertLatin1ToUtf8(string inputFile, string outputFile)
{
    Encoding latin1 = Encoding.GetEncoding(28591);
    byte[] latinBytes = File.ReadAllBytes(inputFile);
    byte[] utf8Bytes = Encoding.Convert(latin1, Encoding.UTF8, latinBytes);
    File.WriteAllBytes(outputFile, utf8Bytes);
}
Respondeu 22/04/2009 em 14:24
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more