即使在今天,人们经常看到频率很高的字符编码问题。以最近的工作岗位为例:
(注意:这是一个示例,不是垃圾邮件职位发布......: - )
我最近在网站,热门IM程序和CNN背景图片上看到了确切的错误。
我的两部分问题:
答案 0 :(得分:4)
导致这种特殊的常见编码问题的原因是什么?
当使用错误的字符集进行字符和字节之间的转换时,会发生这种情况。计算机将数据作为字节处理,但为了以合理的方式向人类表示数据,它必须转换为字符(字符串)。此转换基于一个字符集,其中有许多不同的字符集。
在特定的’
示例中,这是使用UTF-8读取的Unicode Character 'RIGHT SINQLE QUOTATION MARK' (U+2019) ’
的典型CP1252表示。在UTF-8中,该字符存在字节0xE2
,0x80
和0x99
。如果您选中CP1252 codepage layout,那么您会看到这些字节恰好代表字符â
,€
和™
。
这可能是因为网站没有正确读取原始来源(它应该使用CP1252),或者在{{1}中显示错误的charset=CP1252
属性的UTF-8页面响应头(或缺少属性;在Windows机器上,将使用CP1252的默认字符集)。
作为开发人员,我应该如何处理用户输入以避免像这样的常见编码问题?如果此问题需要简化以提供有意义的答案,则假设内容是通过Web浏览器输入的。
确保使用已知和预定义的字符集从任意字节流源(例如文件,URL,网络套接字等)读取字符。然后,确保使用Unicode字符集(最好是UTF-8)始终存储,写入和发送它。
如果您熟悉Java(您的问题历史记录证实了这一点),您可能会发现this article很有用。