asp.net将iso-8859文件转换为utf-8

Oli*_*lay 1 asp.net file character-encoding

我需要将CSV文件从iso转换为UTF-8以保留数据库中的重音符号.

当我尝试将它们翻译成UTF-8时,不会保留法语口音(é,è,ê等),它们会更改为"?".

我很难过.

我使用以下函数进行翻译:

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);

    }
Run Code Online (Sandbox Code Playgroud)

但它似乎不能很好地运作.救命?

Jon*_*eet 5

我强烈怀疑你的原始字符串没有正确的值.我的猜测是你从文件中读取它就像是UTF-8一样.

要在两种编码之间进行转换,首先不应该使用字符串 - 基本上应该加载文件的字节Encoding.Convert()以此方式调用.或者,使用ISO-Latin-1加载文件,并将其保存为UTF-8.例如:

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);
}
Run Code Online (Sandbox Code Playgroud)

要么

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);
}
Run Code Online (Sandbox Code Playgroud)

  • 只有我能讨厌时区问题:) (2认同)