全球旧事资料 分类
1控制台输出乱码问题控制台输出乱码问题
11原理:原理:
JAVA使用UNICODE来存储字符数据,处理字符时通常有叁个步骤:按指定的字符编码形式,从源输入流中读取字符数据以UNICODE编码形式将字符数据存储在内存中按指定的字符编码形式,将字符数据编码并写入目的输出流中。所以JAVA处理字符时总是经过了两次编码转换,一次是从指定编码转换为UNICODE编码,一次是从UNICODE编码转换为指定编码。如果在读入时用错误的形式解码字符,则内存存储的是错误的UNICODE字符。而从最初文件中读出的字符数据,到最终在屏幕终端显示这些字符,期间经过了应用程序的多次转换。如果中间某次字符处理,用错误的编码方式解码了从输入流读取的字符数据,或用错误的编码方式将字符写入输出流,则下一个字符数据的接收者就会编解码出错,从而导致最终显示乱码。
12分析:分析:
在JAVA文件中硬编码中文字符,在eclipse中运行,控制台输出了乱码。例如,我们在JAVA文件中写入以下代码:Stri
gtext“大家好”Systemoutpri
tl
(text)
f如果我们是在eclipse里编译运行,可能看到的结果是类似这样的乱码:????。那么,这是为什么呢?我们先来看看整个字符的转换过程。
1在eclipse窗口中输入中文字符,并保存成UTF8的JAVA窗口中输入中文字符,文件。文件。这里发生了多次字符编码转换。不过因为我们相信eclipse的
正确性,所以我们不用分析其中的过程,只需要相信保存下的JAVA文件确实是UTF8格式。
2在eclipse中编译运行此JAVA文件。这里有必要详细分析一文件。
下编译和运行时的字符编码转换。javac不会智能到猜出你所要编译:我们用javac编译JAVA文件时,编译的文件是什么编码类型的,所以它需要指定读取文件所用的编码类型。默认javac使用平台缺省的字符编码类型来解析JAVA文件。平台缺省编码是操作系统决定的,我们使用的是中文操作系统,语言区域设置通常都是中国大陆,所以平台缺省编码类型通常是GBK。这个编码类型我们可以在JAVA中使用Properties
proSystemgetProperty,progetProperty“filee
codi
g”来查看。所以javac会默认使用GBK来解析JAVA文件。如果我们要改变javac所用的编码类型,就要加上e
codi
g参数,如javace
codi
gutf8Testjava。这里要另外提一下的是eclipse使用的是内置的编译器,并不能添加参数,如果要为javac添加参数则建议使用ANT来编译。不过这并非出现乱码的塬因,因为eclipse可以为每个JAVA文件设置字符编码类
f型,而内置编译器会r
好听全球资料 返回顶部