`
winzenghua
  • 浏览: 1325650 次
  • 性别: Icon_minigender_2
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

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系统没有中文显示支持,所以你看到了乱码(不是问号,问号代表遇到了不
认识的字符),而从远程登录时,这些码被正确地显示了出来,这是因为你的远程系统具有
中文显示支持。
分享到:
评论

相关推荐

    jd-gui-1.6.6.jar - java反编译中文复制无乱码

    在java开发里,源代码是.java文件,然后经过编译后生成计算机识别的.class文件,但是.class文件是计算机识别的我们一般看不明白,因此需要反编译变成我们能读懂的源码,但是反编译后的代码并不是和源码一模一样,...

    java字符编码转换详细过程

    那么,在这些过程中,JDK和JVM是如何将这些文件如何编码和解码并运行的呢? 这里,以中文win2k操作系统为例说明JAVA类是如何来编码和被解码的。 第 一步,我们在中文win2k中用编辑软件如记事本编写一个Java源程序...

    java综合试题(面试题)

    6、Java源程序在转换为机器语言执行过程中既有编译也有解释。 ( ) 7、// 是java的多行注释符。 ( ) 面向对象 3.Java 仅支持类间的单重继承。 ( ) 17.方法可以没有返回值,或有一个返回值,也可以有多个返回值。...

    Java程序员必备 : Java反编译神器——“GUI” 资源分享

    当我们编写完成一个java类后,运行结果会得到一个class文件,这种二进制文件如果用普通记事本打开,就会出现各种乱码现象,令人十分头疼,当我们要查看.class文件的源代码时,可以通过反编译工具jd-gui实现。...

    java源码包---java 源码 大量 实例

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    java程序的编码通过样例test。java(附执行程序)

    java程序的编码通过样例test。java(附执行程序)

    Java反编译工具Luyten-0.5.4

    Luyten是一款很强大的反编译工具包,是一款github的开源工具,软件功能非常强大,界面简洁明晰、操作方便快捷,设计得很人性化。 Github : https://github.com/deathmarine/Luyten/releases。 自从有了Luyten就放弃...

    java源码包2

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    JAVA上百实例源码以及开源项目

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    java源码包4

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    JAVA上百实例源码以及开源项目源代码

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    java源码包3

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    scratchcompiler:该项目是将Java源代码编译为可运行的草稿项目的工具。 (前Alpha!)-java project source code

    该项目是将Java源代码编译为可运行的草稿项目的工具。 (前Alpha!) 下载(如果您只想创建一个项目,请执行此操作) 始终将是这里的最新链接: : 安装很简单,只需解压缩存档,然后将其“安装”即可 安装了Java 8...

    JAVA安全性编程实例.doc及源码

    内容涉及Java加密和解密,反编译和反反编译,对类、成员变量、方法的攻击和保护,消息摘要,消息验证码,数字签名,口令保护,数字证书和证书链的生成、签发、检验和维护,SSL和HTTPS客户及服务器程序、基于代码位置...

    Java实验指导书.doc

    Java实验指导书.doc

    多媒体技术课程设计-java实现算术编码(含源代码和文档)

    多媒体的课程设计 用程序实现算术编码 用java语言实现了算术编码 内容包括:编码和解码的源代码(cdoing.java decoding.java);论文;编译好的程序(只要安装jdk且配好环境变量的机器就可以运行)

    doapkdoapk反编译工具

    smali目录的.smali文件是对java文件的解析,不能瞎改,汉化的话要注意,搜索整个目录,找到你要汉化的文字,替换成就行,注意,里面的参数别瞎改,不然程序编译不成功或者不能正常运行,如果汉化是改的.smali文件,请将其转为...

    125集专攻JAVA基础 JAVA零基础入门学习视频教程 动力节点JAVA视频教程.txt

    北京动力节点-Java编程零基础教程-119-Java基本语法-方法详解-方法的调用过程-方法调用过程中栈内存的变化.avi 北京动力节点-Java编程零基础教程-120-Java基本语法-方法的重载-什么是方法重载.avi 北京动力节点-...

    反编译工具

    Android Killer 是一款可视化的安卓应用逆向工具,集Apk反编译、Apk打包、Apk签名,编码互转,ADB通信(应用安装-卸载-运行-设备文件管理)等特色功能于一 身,支持logcat日志输出,语法高亮,基于关键字(支持单行...

Global site tag (gtag.js) - Google Analytics