我肯定这是很简单的事情,我搞砸了,但我要说:
我正试图解析一个通常用UNICODE格式化的日志文件(我可以坦率地承认,我对UNICODE不太了解,但是文件的前两个字节是0xFFFE,其他每个字符之间都有一个零)。奇怪的是,这个文件似乎以字节序列0x0D000D0A结束行,即\r\0\r\n,这显然使我的TextReader无法读取它。
也就是说,我打印的每一行都充满了:
?????????????????? ???????????? ? ????????? ? ????????????? ? ?????????????? ???? ??? ????? ???????????????????? ??? ???????????? ????????????????? ?????????????????????? ???????????????????? ?????? ????????????????????? ????????????? ?????对于我来说,使用C#解析这个问题的推荐方法是什么?或者说,我做错了什么?
谢谢!
更新:对不起,我可能应该包括我在初始发布中使用的代码。下面是:
FileStream fsa = File.Open(@"C:\InboxLOG.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
TextReader sr = new StreamReader(fsa, Encoding.Unicode, true);
string line = "";
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}使用StreamReader(fsa)会产生相同的结果。
发布于 2009-11-26 07:19:07
嗯..。0x0D000D0A?
你的台词看起来确实很烂。你可能需要更多的手工解析它通过一个流..。我会料到0x0D000A000?(因为这是小恩典)。我想知道一个非Unicode进程是否做了一个“用crlf替换lf”的扫描,并把它弄糟了。当然,您也可以这样做,并且(以两个块处理字节)将0D0A替换为0A00 (仅从偶数字节开始)。但从未损坏的数据开始总是一个更好的选择.
曾:
0xFFFE是一个BOM,所以任何涉及StreamReader等(如File.OpenText)的东西都应该自动处理并选择正确的编码。如果没有,给它一个线索:
using(var reader = new StreamReader(path, Encoding.Unicode)) {
...
}发布于 2009-11-26 07:18:35
请尝尝这个
StreamReader reader = new StreamReader(filePath, System.Text.Encoding.Unicode, true);似乎是UTF16编码,0xFFFE是字节顺序标记。
发布于 2009-11-26 07:23:27
我猜您实际上是在使用StreamReader,因为TextReader是一个抽象类。
根据您的描述,您的文本以UTF-16表示,但StreamReader默认为UTF-8。在构造StreamReader时,需要告诉它使用UTF-16:
new StreamReader(..., System.Text.Encoding.Unicode);https://stackoverflow.com/questions/1802003
复制相似问题