有一些问题。在ANsi中有大的txt文件。
用这样的功能逐行阅读:
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?感谢
答案 0 :(得分:0)
尝试使用Encoding.UTF8.GetBytes()
(在System.Text
命名空间中)获取与UTF-8字符串对应的字节。在.NET中,所有字符串都是内部Unicode,因此在运行时不存在UTF-8 字符串。相反,当以不同格式编码字符串时,您将使用GetBytes()
之类的方法来获取表示内存中编码字符串的字节。
编辑:一些链接:
答案 1 :(得分:0)
首先你需要从文件中读取字节,然后使用Encoding.GetEncoding(1252);要获得ANSI编码(代码页可能为vary),您可以使用GetString获取内部.net-string或将其转换为其他编码。
尝试这样的事情:
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");
}
答案 2 :(得分: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))
{
}
}
}