如何解决字符编码问题?

问题描述:

如果你看到的只是丑陋的无字符框,你用什么工具或策略来弄清楚哪里出了问题?如何解决字符编码问题?

(我所面临的具体情况是一个<内没有炭盒选择>当它应该显示日本字符)。

首先,“丑无炭箱”可能不是一个编码的问题,他们可能只是一个没有安装字体的标志,可以在页面中显示字形。

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

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

对不起,这样一般,但问题没有给予更多的工作。

+0

同时确保应用程序(控制台,编辑,网页),您正在收看的字符被正确配置,以显示预期的字符集。 – 2009-05-28 07:02:34

将数据重定向到磁盘并使用Hex Editor。大多数文本编辑/观众在幕后进行自己的转换,因此很难确定您看到的数据是真实的。

如果您发送给浏览器的数据发生了损坏(moji-bake),您将收到垃圾字符。另外,如果你在你的META头文件中指定了错误的字符集,你的浏览器将错误地渲染页面,导致页面再次出现moji烘烤,有时候会在页面的随机位置。

当处理CJK字符集,你一定要确保使用整个程序的生命周期UTF8字符编码(数据存储,检索,数据在你的代码操作,在browsser等显示...)

什么是UTF8? UTF8处理二进制数据流,而不是字符串。这意味着位组合可以具有可变长度。 ASCII字符的固定长度为8位,代表1个字节,但UTF8字符可以由6位,8位,12位等组成。因此,UTF8容易出现日文称为“mojibake”的情况。作为一个编码器,从数据库到代码库到浏览器,你应该尽量使用UTF8。对于电子邮件,您可以使用UTF8,但您可能会发现大多数邮件服务器和客户端仍旧旧,并使用不同字符集(例如ISO9022X)的混杂信息。

数据库设置 如果你是一个mysql用户,然后确保你必须确保到数据库使用UTF8所有连接,所有表/字段使用UTF8。默认情况下,mysql使用拉丁语(瑞典语)字符集。那些奇怪的幽灵喜欢他们的幽默感!

检查你的代码 以我的经验编辑器如记事本++,的Notepad2,用UltraEdit,电子,等等都有UTF8支持问题。他们主要工作,但由于他们的开发人员本身不使用CJK语言,他们不完善。像关闭物料清单(字节顺序标记),损坏的标签,糟糕的字符集转换等问题......都存在问题。

我强烈建议使用像Maruo这样经过验证的UTF8编辑器。这是由一家日本公司制作的,但有英文版本(和试用版)http://www.hidemaru.interlink.or.jp/software/

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

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

META标签 查看google.co.jp或yahoo.co.jp的META标头。这些网站知道如何正确使用它。主要包括以下META标记的doucment <HEAD>

< META HTTP-当量= “内容类型” CONTENT = “text/html的;字符集= UTF-8” >

它通常是安全的混合英文HTML文件类型属性也具有上述字符。因此,添加上面的META标签似乎适用于HTML文档:

< html xmlns =“http://www.w3.org/1999/xhtml”xml:lang =“en”lang =“en “>

电子邮件 这是一个完全不同的罐蠕虫。 UTF8的工作很多,但许多日本老年客户更多地使用ISO2022X。这不值得在这里介绍。

调试UTF8问题 一旦你有一个可靠的UTF8编辑器,比如丸尾,你可以创建静态页面和解决您的问题。

希望帮助