Skip to main content
 首页 » 编程设计

c#之StreamReader 问题之未知文件编码(西方 ISO 88591)

2024年02月27日25daizhj

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

请您参考如下方法:

代码页 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您可能会发现这很有用。