最近由一个编码问题。让我对另一个编码问题产生了疑惑。
即我们在写java源文件的时候一般使用的是utf-8编码,但是tomcat控制台(直接在bin里面启动的那个黑窗口)编码是gbk.为什么tomcat控制没有乱码问题?
最开始我想的是既然我的java源文件是按照utf-8编码,那么最后必须按照utf-8解码才不会有问题啊。为什么tomcat用gbk解码没有乱码问题?
然后查了下javac编译过程:
当javac编译的时候会根据-Dfile.encoding参数来进行编译,-Dfile.encoding,一般为系统默认字符,windows下为gbk。当我们在ecplise下编写文件的时候,一般我们会设置编码为utf-8,所以编译的时候会以utf-8编译。
重点来了:java编译采用的编码是unicode编码,所以这里面有一个转码的过程。java源文件的编码转码为unicode。这里我做了一个实验:
public static void main(String[] args) {
System.out.println((int)'我');
}
分别修改java源文件的编码为gbk,和utf-8运行上面的代码会发现打印出来的unicode编码都是25105。可见java都是使用unicode编码来对源文件的编码。相当于unicode是一座桥梁。
然后就是打印输出到控制台。
当我们执行下面这段代码的时候到底是什么意思?
String a = "您好";
byte[] bytes = a.getBytes("utf-8");
这句代码的意思是将unicode编码转化为utf-8编码。然后交由控制台去显示。
现在回到最开始的问题:为什么tomcat控制台没有乱码问题?
因为1、在编译源文件的时候,java会根据根据源文件的编码来用unicode编码。放在内存中。不管gbk还是utf-8.都会查找码表生成统一的unicode编码。
2、在控制台输出的时候,java会根据当前-Dfile.encoding参数进行转化,在windows上该编码为gbk,所以java会将unicode编码转化为gbk,然后tomcat控制台用的gbk解码。所以没有乱码问题。
换言之:对java来说,我们不用考虑那么多,只要保证调用String.getBytes("编码")这句代码使用的编码和最终用来解码的编码一致即可。
分享到:
相关推荐
JAVA反编译文件解决中文乱码问题
对于很多人说jad反编译后中文显示乱码,其实显示的是unicode字符;jad命令中有可以让中文正常显示的 -8 - 将Unicode字符转换为ANSI字符串,如果输出字符串是中文的话一定要加上这个参数才能正确显示。 最常用的反...
java项目编译时中文乱码解决 .
jd-gui 1.6.6 -- java反编译中文复制无乱码
从编码角度分析了java编译后在控制台和web等终端显示乱码问题。
jd-gui.exe反编译后复制中文是乱码,xml,yml...等配置文件中文显示为乱码,本资源修改了编码,反编译后中文随意复制,配置文件显示也是正常的
java反编译工具Luyten源码,比较精准的一个java反编译工具,笔者有时候用jd-gui反编译不出来的class用luyten都可以反编译出来。
包括java反编译工具jad.exe和使用手册.txt,与此同时还有反编译后的汉字unicode显示格式转换为字符格式的代码(绝对通过本人测试通过)
Java反编译工具: 1. 修复从反编译代码复制内容中文丢失的问题; 2. 修复打开xml文件、properties文件时中文乱码的问题;
很多人困扰,反编译之后中文显示乱码问题,其实显示的不是乱码,是unicode字符。 -8 - 将Unicode字符转换为ANSI字符串,如果输出字符串是中文的话一定要加上这个参数才能正确显示。 最常用的反编译指令如下所示: ...
luyten 0.5 汉化版(JAVA反编译工具)
详细描述了java从源程序到最后的执行过程编码的转换
一个java里,将乱码编译成中文的类,很短
在java开发里,源代码是.java文件,然后经过编译后生成计算机识别的.class文件,但是.class文件是计算机识别的我们一般看不明白,因此需要反编译变成我们能读懂的源码,但是反编译后的代码并不是和源码一模一样,...
主要介绍了Java package编译乱码问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Java之JDBC连接数据库实现增删改查(2018 使用Dao层实现 完美封装解决硬编码问题 使用预编译对象PreparedStatement) 配置文件 db.properties(保存数据库账号和密码等) 工具类 JDBCUtil.java(抽取公共部分,解决硬...
通过java实现编译原理中的词法分析功能主要包括: 1).识别简单语言的单词符号 2.识别简单语言的基本字、标识符、无符号整数、运算符和界符 例如: 输入: x:=9; if x>0 then x:=2*x+1/3 fi #(可以文件方式读入) ...
1.将jad.exe解压到指定目录。...6.在eclipse窗口下,点击Window > Preferences > Java > JadClipse > Misc,将Convert Unicode strings into ANSI strings选项打勾,避免反编译后可能出现的中文乱码。
java反编译工具jd-gui,jd-gui.exe反编译后复制中文是乱码,xml,yml...等配置文件中文显示为乱码,本资源修改了编码,反编译后中文随意复制,配置文件显示也是正常的