中文乱码gbk-utf-8

在android开发当中,由于开发环境的问题(我们经常使用的是windows、ubuntu、mac os),各种操作系统下创建的工程源码在别的操作系统中打开就会经常发现中文乱码的问题。比如在windows下打开ubuntu下创建的android应用工程,就会发现可能以前写的中文注释乱码了,而且还有可能伴随着一大推莫名其妙的报错。

出现这个问题的原因很简单,就是各个操作系统的编码方式不同。windows下的编码方式为gbk,而linux环境下的编码方式为UTF-8;另外windows和linux下换行符也不同,windows下的换行符为”\r\n”,而linux下为”\r”就可以了,这就是为什么我们在windows下打开linux文件会发现文本不换行了。

解决这个问题也不难,在linux下解决这个问题用个iconv命令把文件编码转为UTF-8就可以了,可参考(http://blog.csdn.net/imyang2007/article/details/7448177)。

在linux操作系统下,我们有时打开在windows下的txt文件,发现在windows下能正常显示的txt文件出现了中文乱码。

出现这种情况的原因为两种操作系统的中文压缩方式不同,在windows环境中中文压缩一般为gbk,而在linux环境中为utf8,这就导致了在windows下能正常显示
txt文件在linux环境下打开呈现了乱码状态。

解决方法:在linux用iconv命令,如乱码文件名为shujujiegou.txt,那么在终端输入如下命令:

  1. iconv -f gbk -t utf8 shujujiegou.txt > shujujiegou.txt.utf8

用ls命令查看结果:

  1. $ ls
  2. shujujiegou.txt  shujujiegou.txt.utf8

发现重新生成了一个shujujiegou.txt.utf8文件,打开之后就能正常显示中文了。

下面要介绍是在windows环境下解决这个问题的方法:利用eclipse工具。

为了使代码有更好的兼容性,最好我们把字符用法UTF-8编码,这个也是windows遭人诟病的地方,它自己实现的GBK编码只能在兼容自己的操作系统,没考虑到现在的国际标准UTF-8,关于字符编码(unicode,UTF-8等详细资料可以参考http://blog.csdn.net/imyang2007/article/details/7470708)。eclipse的默认编码是更系统编码一样的,这里要把eclipse默认编码设置成UTF-8,这样就可以彻底解决windows文件与linux文件的兼容性问题了。

  1. windows->Preferences…打开”首选项”对话框,左侧导航树,导航到 general->Workspace,右侧Text file encoding,选择Other,改变为UTF-8,以后新建立工程其属性对话框中的Text file encoding即为UTF-8。
  2. windows->Preferences…打开”首选项”对话框,左侧导航树,导航到 general->Content Types,右侧Context Types树,点开Text,选择Java Source File,在下面的Default encoding输入框中输入UTF-8,点Update,则设置Java文件编码为UTF-8。其他java应用开发相关的文件如:properties、XML等已经由Eclipse缺省指定,分别为ISO8859-1,UTF-8,如开发中确需改变编码格式则可以在此指定。

经过上述两步,新建java文件即为UTF-8编码,Eclipse编译、运行、调试都没问题,但是做RCP应用的Product输出时、或者插件输出时,则总是出错,要么不能编译通过(输出时要重新compile)、要么输出的插件运行时中文显示乱码。此时需要再RCP应用、或插件Plugin工程的build.properties中增加一行,javacDefaultEncoding.. = UTF-8。让输出时编译知道java源文件时UTF-8编码。这个设置需要保证所有的java源文件时UTF-8编码格式,如果不全是,可以参考Eclipse帮中(Plug-in Development Environment Guide > Reference > Feature and Plug-in Build configuration),建议全部java源文件是UTF-8编码。

如果插件开发、RCP应用开发原来基于其他编码,如GB18030,想转换为UTF-8,则首先,做以上工作;然后通过查找编码转换工具,如基于 iconv的批量转换工具,将原编码转换为UTF-8编码,注意只转换java源文件,其他类型文件可能已经是比较合适的编码了;将原工程属性中的 Text file encoding,从原编码改为UTF-8即可。