Java编译和运行过程中的编码问题

首先,java的中文问题出现在很多场合内。每种场合使用不同的处理方法。你这里想搞清楚的是“在java源代码文件中的常量字符串引号内出现的中文字符的运行时显示”的问题。 ok,那么我们就来看看javac如何编译该字符串。首先,javac看命令行中有没有用-encod ing参数指定一个字符集,没有,则用系统环境中指定的字符集。接下来javac开始解释源码文件,遇到多字节的字符,就用前面确定的字符集编码来解释,并转换为unicode,写入 .class 的字节码文件里面。好了,下面我们要运行这个class文件了,jvm启动后读入class字节码,那些个中文字符串都以unicode表示,这没什么可说的,在哪都一样(平台无关的)。下面可能需要输出这个字符串到其它的应用程序了:控制台/文件/socket等等等等....这样jvm首先要检查操作系统的 encoding(注意,jvm从字节码里面完全不知道这些字符串是什么编码的,全是unicode ),然后按该encoding来解释这些 unicode码到操作系统的encoding。当然,对于特殊的环境jvm也许不去检查操作系统的encoding,而是从环境变量里面读,这样你就可以控制jvm 执行时的目的encoding了。最后一步,如果你的操作系统的(或目的)encoding与真实的encoding一致(或具有兼容关系 ),那么你将看到正确的字符串,如果你不一致,你会看到什么?对了,是问号。 所以“在 Linux 操作系统上就是ISO-8859-1”是不对的,关键是环境变量LANG是怎么设置的,以及有没有显式地使用-encoding参数。 其实如果你编译和运行如果在同一个操作系统上运行的话,输出是绝对不会有问题的。那么你的第四个问题是怎么产生的呢?很简单,虚拟机运行时输出的字符串是100%正确的,可惜你的linux系统没有中文显示支持,所以你看到了乱码(不是问号,问号代表遇到了不认识的字符),而从远程登录时,这些码被正确地显示了出来,这是因为你的远程系统具有中文显示支持。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值