【发布时间】:2016-08-05 11:55:32
【问题描述】:
我必须阅读一个可以包含以下语言字符的文本文件:英语、日语、中文、法语、西班牙语、德语、意大利语
我的任务是简单地读取数据并将其写入新的文本文件(在 100 个字符后放置新行 char \n)。
我不能使用File.ReadAllText 和File.ReadAllLines,因为文件大小可能超过 500 MB。所以我写了以下代码:
using (var streamReader = new StreamReader(inputFilePath, Encoding.ASCII))
{
using (var streamWriter = new StreamWriter(outputFilePath,false))
{
char[] bytes = new char[100];
while (streamReader.Read(bytes, 0, 100) > 0)
{
var data = new string(bytes);
streamWriter.WriteLine(data);
}
MessageBox.Show("Compleated");
}
}
除了ASCII 编码我尝试过UTF-7、UTF-8、UTF-32 和IBM500。但是在读写多语言字符方面没有运气。
请帮助我实现这一目标。
【问题讨论】:
-
语言无关紧要(如果你真的需要计算字符,也就是符号)。重要的是编码,这些特殊字符是如何存储的。如果编码使用 8 位来表示一个字符(ASCII),那么你的方法是可以的,因为读取 100 个字节等于读取 100 个字符:只需在写入每个部分后添加
'\n'。否则(variable-lengh encoding)你确实有麻烦了,你一定知道/detect encoding。 -
您将不得不弄清楚文本是如何编码的。如果文件包含亚洲和西方语言,它可能是 Unicode、Big Endian Unicode 或 UTF32。希望该文件以 Christian Jäger 的回答中所示的编码指示符开头。或者它可能是编码的混合,在这种情况下,您必须弄清楚文件的结构。甚至可能您必须检查文本并推断编码,这根本不是一件容易的事。
-
如果没有按照规范、约定或标准进行编码,一个选项是“发回”。 “检测”编码是最后的手段。
-
我认为stackoverflow.com/questions/7470997/… 应该会有所帮助
标签: c# windows encoding .net-4.5.2