字符编码和 ’ 问题

3
即使今天,在编码方面仍经常出现问题。例如,最近的一则职位招聘就出现了这样的问题:
(注:这只是一个例子,不是垃圾邮件招聘......:-)
我最近在网站、流行的即时通讯程序和CNN背景图形上看到了这个确切的错误。
我的两个问题是:
1. 是什么原因导致了这种特定的常见编码问题?
2. 作为开发者,为了避免像这样的常见编码问题,我应该如何处理用户输入?如果需要简化问题以提供有意义的答案,则假定内容是通过Web浏览器输入的。
1个回答

4
这种常见的编码问题是由于使用错误的字符集进行字符和字节之间的转换所导致的。计算机处理数据时以字节为单位,但为了以人类可读的方式表示数据,必须将其转换为字符(字符串)。这种转换基于许多不同的字符集。
在特定的“’”示例中,这是一个典型的CP1252表示,代表Unicode Character 'RIGHT SINQLE QUOTATION MARK' (U+2019) “’”,它是使用UTF-8读取的。在UTF-8中,该字符由字节0xE20x800x99组成。如果您查看CP1252 codepage layout,则会发现这些字节恰好代表字符â
这可能是由于网站没有正确读取原始源(应使用CP1252),或者在“Content-Type”响应头中以错误的 charset = CP1252 属性显示UTF-8页面(或属性缺失;在Windows机器上,将使用默认的CP1252字符集)。
作为开发者,如何避免常见的编码问题?对于这个问题,如果需要简化回答,请假设内容是通过Web浏览器输入的。您需要确保使用已知和预定义的字符集从任意字节流源(例如文件、URL、网络套接字等)读取字符。然后,确保您始终使用Unicode字符集(最好是UTF-8)存储、写入和发送它。如果您熟悉Java(您的问题历史证实了这一点),您可能会发现 this article 有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接