网站中如果涉及到东亚语音,比如中文,日语等,就不得牵扯到字符的编码问题,这本来是一个历史问题,到如今却成为了一个软件开发的大问题。几乎做过B/S开发的人都遇到过字符乱码问题。那么UTF-8不是支持全球所有语言吗?理论上是的,但是在中国,gb2312 GBK等字符集已经活得了广泛的使用,而GBK gb2312与UTF-8的编码又是不一样的。正是因为编码的混乱,造成开发时经常会出现乱码。
那么如果解决这个问题呢?
要统一四方面的编码(有的人仅仅在页面中加入一些代码就声称解决编码问题,其实根本没有解决真正的问题所在)。
第一方面,就是开发人员在编写代码的时候所使用的编码方式,这很重要。如果在程序中使用硬编码的方式写入一些静态文本,在本机似乎看起来一切正常,可是到了另一台电脑,情况可能就完全不同了。要知道B/S结构的软件是面向全球的,有谁会知道对方在使用那种编码呢?比如现在一般常用的IDE使用的默认编码是UTF-8 ,在软件完成之后,在另一个只支持gb2312的编码里有可能就是一串乱码。如果程序中涉及到中文的硬编码,最好将编辑器的字符集设置为GBK因为GBK对英文字符编码方式是兼容的,这样在国外可以看到英文,国内也可以看到中文,这种做法对于面向国内用户的网站来说是最好的做法了,如果主要是面向国外,则使用默认的UTF-8是最好的选择。
第二方面,输入法的编码设置,很多人在被乱码问题弄得头晕的时候往往不会意识到自己的输入法有问题。其实中文在输入的时候,输入法肯定要选择一种字符集进行编码的,如果输入法的字符集是UTF-8 那么只支持GBK和gb2312的浏览器显示的肯定会是乱码,解决方式如上,将输入法的字符集设置为GBK以获得最好的兼容性。
第三方面,数据库的字符编码设置,就拿MySql来说,在安装配置的时候,Mysql会提示用户选择某一个特定的字符集,对于使用中文的软件来说,选择GBK仍旧是最好的选择。
第四方面,java虚拟机编译时的字符集设置,如果输入的是GBK 而编译JSP使用的是UTF-8的话,那么一切又都乱了。所以可以在编译参数里写入
-encoding GBK
这样一切都是GBK格式,中文的现实才被解决了,当然也可以全部设置为UTF-8或者GB2312 对于国内网站来说GBK仍旧是最佳选择。但不管选择哪种方式,一定要让这四个方面的编码方式保持,一直,否则乱码随时都有可能出现。
编码问题不是一时半会所能解决的。即使以上这四个方面都做到了,在美国的用户如果使用UTF-8字符集的浏览器访问GBK的中文网站,仍旧会使乱码一团。这是一个历史原因,在将来的某个时刻,或许会被最终解决。