2

从输入文件中读取数据时,我注意到 ¥ 符号没有被 StreamReader 读取。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 安全吗?我应该要求用户以特定格式保存文件吗?

4

3 回答 3

3

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

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

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

我有一篇关于 Unicode的文章和另一篇关于调试 Unicode 问题的文章,您可能会发现它们很有用。

于 2008-12-16T09:39:24.107 回答
2

现有代码未使用任何编码

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

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

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

于 2008-12-16T10:04:34.867 回答
1

您是软件开发人员吗?不要忘记阅读 Joel Spolsky 的 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

于 2008-12-16T10:21:30.090 回答