StreamReader问题 - 未知文件编码(western iso 88591)

时间:2008-12-16 09:29:16

标签: c# encoding character-encoding inputstream streamreader

从输入文件中读取数据时,我注意到StreamReader没有读取¥symbom。 Mozilla Firefox将输入文件类型显示为Western(ISO-8859-1)。

在使用编码参数后,我发现它成功地用于以下值:

System.Text.Encoding.GetEncoding(1252) // (western iso 88591)

System.Text.Encoding.Default 

System.Text.Encoding.UTF7

现在我打算使用“默认”设置,但我不确定这是否是正确的决定。现有的代码没有使用任何编码,我担心我可能会破坏某些东西。

我对编码知之甚少(或者说没什么)。我该怎么做?我决定使用System.Text.Encoding.Default安全吗?我应该要求用户以特定格式保存文件吗?

3 个答案:

答案 0 :(得分:3)

代码页1252与ISO-Latin-1不完全相同。如果您想要ISO-Latin-1,请使用Encoding.GetEncoding(28591)。但是,我希望它们对于这个代码点(U + 00A5)是相同的。 UTF-7完全不同(几乎从不使用)。

Encoding.Default 安全 - 在大多数情况下,这是一个非常糟糕的主意。它特定于您正在运行的特定计算机。如果您将文件从一台计算机传输到另一台计算机,谁知道原始计算机使用的编码?

如果您知道您的文件是ISO-8859-1,那么请明确使用它。是什么产生这些文件?如果他们只是被用户保存,那么他们将保存哪些程序?如果UTF-8是一个选项,这是一个很好的选择 - 部分是因为它可以处理整个Unicode。

我有一个article on Unicode而另一个debugging Unicode issues,您可能会觉得有用。

答案 1 :(得分:2)

  

现有代码未使用任何编码

它可能没有明确指定编码,在这种情况下编码可能默认为Encoding.UTF8。

名称Encoding.Default可能会给人一种印象,即这是StreamReader等类使用的默认编码,但事实并非如此:正如Jon Skeet所指出的,Encoding.Default是操作系统当前ANSI的编码代码页。

我个人认为这使得属性名称Encoding.Default有点误导。

答案 2 :(得分:1)