2013-06-04 23 views
0

有一些問題。在ANsi中有大的txt文件。字符串安慰到UTF-8

通過該功能讀取線就行:

private static IEnumerable<string> ReadLineFromFile(TextReader fileReader) 
{ 
    using (fileReader) 
    { 
     string currentLine; 
     while ((currentLine = fileReader.ReadLine()) != null) 
     { 
      yield return currentLine; 
     } 
    } 
} 


public void go() 
{ 
    while (true) 
    { 
     TextReader readFile = new StreamReader(file_path); 
     foreach (string line in ReadLineFromFile(readFile)) 
     { 
     } 
    } 
} 

如何將所有ANSI線轉換爲UTF-8?謝謝

+1

http://stackoverflow.com/questions/3778241/converting-problem-ansi-to-utf8-c-sharp這是否解決您的問題? –

+2

您可以使用File.ReadLines()和Encoding.Default的參數 –

回答

0

嘗試使用Encoding.UTF8.GetBytes()(在System.Text名稱空間中)來獲取與UTF-8字符串對應的字節。在.NET中,所有字符串都是內部Unicode的,因此在運行時不存在如UTF-8 字符串。相反,在編碼不同格式的字符串時,您將使用像GetBytes()這樣的方法來獲取表示內存中編碼字符串的字節。

編輯:有些鏈接:

0

首先,你需要從文件中讀取的字節數,然後使用Encoding.GetEncoding(1252);要獲得ANSI編碼(代碼頁可能爲vary),則可以使用GetString獲取內部.net字符串或將其轉換爲其他編碼。

嘗試這樣:

private IEnumerable<string> ReadLineFromFile(string path) 
{ 
    byte[] ansiEncodedBytes = File.ReadAllBytes(path); 
    Encoding ansi = Encoding.GetEncoding(1252); 
    string utf16string = ansi.GetString(ansiEncodedBytes); 
    return utf16string.Split("\n"); 
} 
0

如果您使用的是.NET 4後,您可以使用File.ReadLines(string path, Encoding encoding)方法。

這會像您的ReadLineFromFile()方法一樣逐行讀取文件,而Encoding參數將允許您指定Encoding.Default。這會告訴它在閱讀文本時使用操作系統的當前ANSI代碼頁。

請注意,字符串將從ANSI轉換爲UTF16,因爲UTF16是C#中string的類型。

所以,你可以重寫你的go()的測試方法,像這樣:

using System.IO; 
using System.Text; 

... 

public void go() 
{ 
    while (true) 
    { 
     foreach (string line in File.ReadLines(file_path, Encoding.Default)) 
     { 
     } 
    } 
}