2011-12-07 74 views
2

即使在今天,人们经常会发现频繁出现字符编码问题。就拿最近这次的招聘信息:字符编码和“问题”

Bad Encoding

注意:这是一个例子,不是垃圾作业后... :-)

我最近看到确切网站上的错误,流行IM程序中以及CNN背景图形中的错误。

我的两个部分的问题:

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

回答

4

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

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

在具体的’示例中,这是使用UTF-8读取的Unicode Character 'RIGHT SINQLE QUOTATION MARK' (U+2019)的典型CP1252表示。在UTF-8中,该字符存在字节0xE2,0x800x99。如果您检查CP1252 codepage layout,那么您会看到这些字节完全代表字符â,

这可以通过该网站不具有原始源正确读取引起的(它应该已经使用CP1252此),或者显示与Content-Type响应报头中的错误charset=CP1252属性(或属性的UTF-8页缺失;在Windows机器上,将使用CP1252的默认字符集)。


作为开发人员,我应该与用户输入做,以避免这样一个共同的编码问题?如果这个问题需要简化以提供有意义的答案,则假定内容通过网络浏览器输入。

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

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