`
huoyunshen888
  • 浏览: 81748 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Java在linux中文乱码问

阅读更多
事情的起因是:我使用geany集成开发环境开发,里面使用了中文,在综端用javac命令编译java程序的时候出现了中文无法解释。看起来和不爽,通过我的查询,明白了结果,一下是我查到的两篇文章,我也是根据这两篇文章解决问题的。

  解决的方法有:

  1:在geany中设置“生成”,在编译改为javac "%f" -encoding GB18030,执行改为java "%e" -encoding GB18030,这样你要是用geany编译和运行就不会出现乱码了。在“编辑”、“首选项”里面把编码都设置文GB18030,不知道不设置的结果是什么,没有测试。

  2:如果你不喜欢在geany里面编译,可以在综端里面用javac ClassName.java -encoding GB18030和javac ClassName -encoding GB18030就可以了。

  3:怕麻烦那就在/etc/profile下添加两行

  export LC_ALL="zh_CN.GBK"

  export LANG="zh_CN.GBK"

  保存后,用source /etc/profile使其生效。

  在修改前,可以用locale命令查看当前的设置,修改后在查看有没有生效。

  不知道这样改会不会有什么后果。等待以后验证。

  ------------第一篇参考文章----------------

  由于JDK是国际版的,在编译的时候,如果我们没有用-encoding参数指定我们的JAVA源程序的编码格式,则javac.exe首先获得我们操作 系统默认采用的编码格式,也即在编译java程序时,若我们不指定源程序文件的编码格式,JDK首先获得操作系统的file.encoding参数(它保 存的就是操作系统默认的编码格式,如WIN2k,它的值为GBK),然后JDK就把我们的java源程序从file.encoding编码格式转化为 JAVA内部默认的UNICODE格式放入内存中。然后,javac把转换后的unicode格式的文件进行编译成.class类文件,此时.class 文件是UNICODE编码的,它暂放在内存中,紧接着,JDK将此以UNICODE编码的编译后的class文件保存到我们的操作系统中形成我们见到 的.class文件。对我们来说,我们最终获得的.class文件是内容以UNICODE编码格式保存的类文件,它内部包含我们源程序中的中文字符串,只 不过此时它己经由file.encoding格式转化为UNICODE格式了。

  -----------第二篇参考文章---------------

  修改/etc/sysconfig/language文件,将RC_LANG, RC_LC_ALL设置为zh_CN.GB2312, 同时将ROOT_USES_LANG设置为 "yes"

  一。Linux系统的默认编码设置。

  /etc/sysconfig/i18n

  Controls the system font settings. The language variables are used in /etc/profile.d/lang.sh. An example i18n file:

  LANG="zh_CN.GB18030"

  LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"

  SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"

  SYSFONT="lat0-sun16"

  以上是把系统的默认字符集设置为GB2312.现在很多系统默认编码字符集是UTF-8。可以通过设置这个文件来改变系统的默认字符集。

  另外,也可在用户的环境变量或者用户的环境变量文件加入路径变量的声明:

  在系统的预处理文件中声明,这样对整个系统起作用:

  #vi /etc/profile

  在文件尾加入

  LC_ALL="zh_CN.GBK"

  export LANG="zh_CN.GBK"

  在用户的预处理文件中声明,对单独的用户起作用:

  #vi /root/.bash_profile

  在文件尾加入

  export LC_ALL="zh_CN.GBK"

  export LANG="zh_CN.GBK"

  以上配置重新启动服务器使更改生效。

  二。查看系统当前字符集。

  locale:local encode,即本地编码的意思。这个命令不带任何参数就是显示当前系统的字符集编码。也可以设置环境变量,全体参数man locale

  三。安装字体。

  #mkdir 要存放字体的文件夹

  #cp *.ttf 刚才创建的文件夹

  生成 fonts.dir 文件

  #ttmkfdir > fonts.dir

  注:mkfontdir 用于生成点阵字体的 fonts.dir 文件,ttmkfdir 用于生成 TrueType 字体的 fonts.dir 文件。由于 ttmkfdir 不能识某些汉字TTF的编码,需手工修改。

  生成的 fonts.dir 如下:

  fonts.dir

  ======

  simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-ascii-0

  改为:

  simsun.ttf -misc-SimSun-medium-r-normal--0-0-0-0-p-0-gb2312.1980-0

  生成 fonts.alias 文件

  #cat fonts.dir > fonts.alias

  将 fonts.alias 内容改为:

  SimSun -misc-SimSun-medium-r-normal--0-0-0-0-p-0-gb2312.1980-0

  将字体的路径添加的FontPath中

  #vi /etc/X11/XF86Config

  在此文件中添加刚才创建的路径

  #step

  #fc_cache 刚才创建的路径,强制刷新字体缓存,使字体生效。

  四。vim编码。

  encoding—-该选项使用于缓冲的文本(你正在编辑的文件),寄存器,Vim 脚本文件等等。你可以把 ‘encoding’ 选项当作是对 Vim 内部运行机制的设定。

  fileencoding—-该选项是vim写入文件时采用的编码类型。

  termencoding—-该选项代表输出到客户终端(Term)采用的编码类型。

  此3个变量的默认值:

  encoding—-与系统当前locale相同,所以编辑文件的时候要考虑当前locale,否则要设置的东西就比较多了。

  fileencoding—-vim打开文件时自动辨认其编码,fileencoding就为辨认的值。为空则保存文件时采用encoding的编码,如果没有修改encoding,那值就是系统当前locale了。

  termencoding—-默认空值,也就是输出到终端不进行编码转换。

转自:<a href='http://www.yuloo.com/jsjks/'>计算机培训网</a>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics