2009-04-22 57 views
1

我需要将CSV文件从iso转换为UTF-8才能将重音符号保存在数据库中。asp.net转换iso-8859文件为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); 

    } 

但它似乎并没有很好地工作。帮帮我?

回答

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

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); 
} 
+0

谢谢你一百万次。我讨厌编码问题可以吗? :P – 2009-04-22 13:33:47

0

你可能会失去你的编码,当你宣布新的字符串,或者当您保存字符数组

+0

我不应该失去的编码这种方式,因为我的iso转换为字节,则字节为utf-8 ...除非有是我不知道的字节级自动字符转换,它不应该是问题。 – 2009-04-22 13:20:33

0

取而代之的是GetChars()方法的数据,你就不能叫

unicode.GetString(unibytes);