【问题标题】:StreamReader problem - Unknown file encoding (western iso 88591)StreamReader 问题 - 未知文件编码 (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 安全吗?我应该要求用户以特定格式保存文件吗?

【问题讨论】:

    标签: c# encoding character-encoding inputstream streamreader


    【解决方案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】:

      【讨论】:

      • 不错!在潜艇上剥洋葱 6 个月!
      猜你喜欢
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多