2009-04-22 19 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);