字符编码和问题

时间:2011-12-07 19:30:14

标签: character-encoding cross-platform mojibake

即使在今天,人们经常看到频率很高的字符编码问题。以最近的工作岗位为例:

Bad Encoding

注意:这是一个示例,不是垃圾邮件职位发布......: - )

我最近在网站,热门IM程序和CNN背景图片上看到了确切的错误。

我的两部分问题:

  • 导致这种特殊的常见编码问题的原因是什么?
  • 作为开发人员,我应该如何处理用户输入以避免常见的编码问题,例如 这个?如果这个问题需要简化提供一个 有意义的答案,假设内容是通过网络浏览器输入的。

1 个答案:

答案 0 :(得分:4)

  

导致这种特殊的常见编码问题的原因是什么?

当使用错误的字符集进行字符和字节之间的转换时,会发生这种情况。计算机将数据作为字节处理,但为了以合理的方式向人类表示数据,它必须转换为字符(字符串)。此转换基于一个字符集,其中有许多不同的字符集。

在特定的’示例中,这是使用UTF-8读取的Unicode Character 'RIGHT SINQLE QUOTATION MARK' (U+2019) 的典型CP1252表示。在UTF-8中,该字符存在字节0xE20x800x99。如果您选中CP1252 codepage layout,那么您会看到这些字节恰好代表字符â

这可能是因为网站没有正确读取原始来源(它应该使用CP1252),或者在{{1}中显示错误的charset=CP1252属性的UTF-8页面响应头(或缺少属性;在Windows机器上,将使用CP1252的默认字符集)。


  

作为开发人员,我应该如何处理用户输入以避免像这样的常见编码问题?如果此问题需要简化以提供有意义的答案,则假设内容是通过Web浏览器输入的。

确保使用已知和预定义的字符集从任意字节流源(例如文件,URL,网络套接字等)读取字符。然后,确保使用Unicode字符集(最好是UTF-8)始终存储,写入和发送它。

如果您熟悉Java(您的问题历史记录证实了这一点),您可能会发现this article很有用。