StreamReader 问题 - 未知文件编码 (western iso 88591)
Posted
技术标签:
【中文标题】StreamReader 问题 - 未知文件编码 (western iso 88591)【英文标题】:StreamReader problem - Unknown file encoding (western iso 88591) 【发布时间】:2010-09-27 02:44:53 【问题描述】:从输入文件读取数据时,我注意到 ¥ 符号没有被 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 安全吗?我应该要求用户以特定格式保存文件吗?
【问题讨论】:
【参考方案1】:代码页 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,您可能会觉得有用。
【讨论】:
不幸的是,UTF-8 对我不起作用。阅读文章..“这是一个很大的话题。”并不是我所希望的开始 ;-) 当您尝试读取以 ISO-8859-1 编码的文件时,UTF-8 将不起作用,不。但是,如果您可以说服您的用户改为使用 UTF-8 保存,那将是一个胜利。【参考方案2】:现有代码没有使用任何编码
它可能没有明确指定编码,在这种情况下,编码可能默认为 Encoding.UTF8。
名称 Encoding.Default 可能给人的印象是这是 StreamReader 等类使用的默认编码,但事实并非如此:正如 Jon Skeet 指出的那样,Encoding.Default 是操作系统当前 ANSI 的编码代码页。
我个人认为这使属性名称 Encoding.Default 有点误导。
【讨论】:
【参考方案3】:您是软件开发人员吗?不要忘记阅读 Joel Spolsky 的 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
【讨论】:
不错!在潜艇上剥洋葱 6 个月!以上是关于StreamReader 问题 - 未知文件编码 (western iso 88591)的主要内容,如果未能解决你的问题,请参考以下文章