Encoding 如何解决字符编码问题?

Encoding 如何解决字符编码问题?,encoding,localization,Encoding,Localization,如果你看到的只是丑陋的无字符框,你会用什么工具或策略来找出哪里出了问题 (我所面临的具体场景是,当它应该显示日文字符时,a中没有字符框。)首先,“丑陋的没有字符框”可能不是编码问题,它们可能只是一种迹象,表明您没有安装可以在页面中显示字形的字体 大多数字符编码问题发生在字符串从一个系统传递到另一个系统时。对于webapps,这通常在浏览器和应用程序之间、应用程序和文件系统之间以及应用程序和数据库之间 因此,您需要检查错误编码的数据来自何处,它在源位置具有什么字符编码,以及它作为什么编码接收。最好

如果你看到的只是丑陋的无字符框,你会用什么工具或策略来找出哪里出了问题

(我所面临的具体场景是,当它应该显示日文字符时,a中没有字符框。)

首先,“丑陋的没有字符框”可能不是编码问题,它们可能只是一种迹象,表明您没有安装可以在页面中显示字形的字体

大多数字符编码问题发生在字符串从一个系统传递到另一个系统时。对于webapps,这通常在浏览器和应用程序之间、应用程序和文件系统之间以及应用程序和数据库之间

因此,您需要检查错误编码的数据来自何处,它在源位置具有什么字符编码,以及它作为什么编码接收。最好的方法是发送你知道系统有问题的字符,并在应用程序的每个级别检查它们。它们在应用程序中看起来像什么?在数据库里?当你从数据库中取回它们时?当它们显示在浏览器中时


很抱歉这么笼统,但这个问题没有给出更多的解决方法。

将数据重定向到磁盘,并使用一个。大多数文本编辑器/查看器都在幕后进行自己的转换,因此很难确保您看到的数据是真实的形式。

如果发送到浏览器的数据被损坏(moji bake),您将收到垃圾字符。此外,如果在元标题中指定了错误的字符集,浏览器将错误地呈现页面,导致再次进行moji烘焙,有时会在页面上的随机位置进行

处理CJK字符集时,必须确保在程序的整个生命周期内使用UTF8字符编码(数据存储、检索、代码中的数据操作、浏览器中的显示等)

什么是UTF8? UTF8处理二进制数据流,而不是字符串。这意味着位组合可以具有可变长度。ASCII字符的固定长度为8位,代表1个字节,但UTF8字符可以由6位、8位、12位等组成。。。因此,UTF8倾向于日本人所说的“mojibake”

作为一名程序员,从数据库到代码库再到浏览器,您应该尝试完全使用UTF8。对于电子邮件,您可以使用UTF8,但您可能会发现大多数邮件服务器和客户端仍然很旧,并且使用了不同字符集(例如ISO9022X)

数据库设置 如果您是mysql用户,那么请确保与数据库的所有连接都使用UTF8,并且所有表/字段都使用UTF8。默认情况下,mysql使用拉丁(瑞典语)字符集。那些古怪的瑞典人喜欢他们的幽默感

检查您的代码库 根据我的经验,像Notepad++、Notepad2、UltraEdit、e等编辑器。。。都有UTF8支持问题。它们大部分都可以工作,但由于它们的开发人员自己不使用CJK语言,因此它们并不完美。诸如关闭BOM(字节顺序标记)、选项卡损坏、字符集转换不良等问题。。。所有这些都存在问题

我强烈推荐使用像Maruo这样经过验证的UTF8编辑器。这是由一家日本公司制造的,但网站上有英文版(和试用版)

最后,您可能需要将源文件转换为UTF8。特别是如果代码库本身包含CJK语言字符串

操作字符串 任何字符串函数都需要多字节安全。注意,我没有说双字节。UTF8不是双字节而是多字节,具体取决于用于表示字符的总位数。在PHP中,需要专门调用MB字符串函数。Ruby和其他语言有更透明的支持,但您需要检查文档以了解您的应用服务器风格

元标记 查看google.co.jp或yahoo.co.jp的元标题。这些网站知道如何正确使用它。基本上包括以下元标记doucment

将英文HTML文档类型属性与上述字符混合使用通常也是安全的。因此,在HTML文档中添加上面的META标记似乎是可行的,该文档具有:

电子邮件 这是一罐完全不同的蠕虫。UTF8非常有效,但许多较老的日本客户机使用的ISO2022X更多。这不值得在这里讨论

调试UTF8问题 一旦有了可靠的UTF8编辑器(如Maruo),就可以创建静态页面并解决问题


希望这有助于

同时确保您观看字符的应用程序(控制台、编辑器、网页)正确配置为显示预期的字符集。