2012-09-20 38 views
0

林雷丁一些的CSV文件。该文件是很容易的,因为总是有刚“;”作为分隔符,也没有,或类似的东西阅读文件之前,我必须检查ANSI编码吗?

因此,它可以读取该文件,一行行。 。和独立琴弦那做工精细现在,人们告诉我:也许你应该检查文件的编码,它应该是始终ANSI,如果它不是,也许你的输出将会有所不同,损坏的所以非ANSI文件应标明。不知何故

我刚才说的,对吧但是如果我想想吧。!?难道我真的要为您在这种情况下,编码的文件我只是改变了文件的编码的东西其他和我仍然能够读取文件没有任何问题。我的代码很简单:

using (TextReader reader = new StreamReader(myFileStream)) 
{ 
    while ((line = read.ReadLine()) != null) 
    { 
    //read the line, spererate by ; and other stuff... 
    } 
} 

所以再次:我真的需要检查文件的ANSI编码吗?有人能给我一个例子,我何时可能遇到麻烦,或者在阅读非ansi文件后何时得到损坏的输出?谢谢!

回答

2

也就是说的StreamReader特定构造将假定该数据是UTF-8;这是与ASCII兼容,但如果数据在128-255范围内的单字节代码页使用的字节(你会得到字符串等错误的字符),或者可能失败可能失败完全(即抛出一个异常)如果数据实际上与UTF-7,UTF-32等非常不同,则可以使用字节顺序标记来检测编码,但这是一种非常不同的方式,如UTF-7,UTF-32等圆形问题:在大多数情况下,如果你不已经知道编码,你不能真正检测编码(稳健)。所以更好的方法是:首先了解编码。然后你就可以在正确道编码通过其他构造函数之一来使用。

下面是它失败的例子:

// we'll write UTF-32, big-endian, without a byte-order-mark 
File.WriteAllText("my.txt", "Hello world", new UTF32Encoding(true, false)); 

using (var reader = new StreamReader("my.txt")) 
{ 
    string s = reader.ReadLine(); 
} 
相关问题