从输入文件中读取数据时,我注意到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安全吗?我应该要求用户以特定格式保存文件吗?
答案 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)