您的位置:首页 > 编程语言 > Java开发

乱码之一 eclipse console 和 xp console 乱码 全程详解(一)

2016-04-13 00:00 302 查看
摘要: 乱码之一 eclipse console 和 xp console 乱码 全程详解(一)

在java开发中,如果项目中有中文,乱码的问题会经常的遇到。而这个问题,并且经常困扰大家。最近元旦,manager都休假,我就花了点点时间,去仔细的研究了一下,乱码的问题以及根源。
先说,我们常用的编码格式(charset):

1)iso8859-1,这个是一种单字节的编码,也就是其利用了ascii码以及其他没有被利用到的0-255之间的其他的字节,来对数据进行编码

2)gbk 汉字内码扩展规范,兼容gb2312是一种双字节编码。即对于每个字符,都用两个字节来表示。

3)utf-8 是UNICODE的一种变长字符编码又称万国码。

具体以上三个之间的转码关系,或者是一个汉字对应的三个之间的编码,可以搜索一下,资料很多。我下面主要说一下乱码的原因。

所有的数据的保存,以及传输都是二进制数据,但是这种二进制与人类可识别的各种文字符号之间,并不是一 一对应的,这取决于所采用的编码,即把一个可见字符,通过某种编码,以一个或者多个字节来替代,并进行保存和传输。我们通常在notepad或者ue里面看到的,不论是中文或者是英文,都只是将保存在硬盘的二进制数据,通过某种已知的或者已经确定的编码进行解码,然后输出到显示器,方便我们自己查看。

文字符号--(encode)-->binary--(decode)-->文字符号.当encode与decode所采用的charset不一致的时候就会出现乱码问题。

针对于java开发,所见的文件有两种,java code source file和java class file。

先说java code source file的编码问题,通常我们直接用记事本,写一个HelloWorld.java文件,然后保存,它默认用的是系统的编码,比如GBK.
然后通过javac HelloWorld.java编译得到class file.

那么其中第一个乱码产生之一就是HelloWorld.java的编码.

public class HelloWorld{
public static void main(String[]args){
String chineseChar="汉";
System.out.println(chineseChar);
}
}

将其用notepad保存为默认格式,然后用十六进制的软件或者ue打开(关闭所有的格式自动转换和检测),如果你能够在HelloWorld.java的十六进制格式中找到BA BA那么这个source file以GBK或者兼容的格式保存的,而如果是E6 B1 89那么则是用UTF-8保存的(“汉”的GBK编码为BABA,UTF-8编码为E6 B1 89),此时我们如果要准确的编译为class文件,则要指定源文件的编码格式

即javac -encoding GBK HelloWorld.java (如果看到的是BA BA)或者javac -encoding UTF-8 HelloWorld.java(看到的是E6 B1 89),那么我们再执行java HelloWorld即可在控制台看到输出的“汉”字。

当然,这个指的是你的电脑的环境是默认charset如果为GBK(及其兼容模式),才会正常输出,否则,将仍然会出现乱码。(具体原因稍后解释).

小结一:

&nb
7fe0
sp; a)上面如果是UTF-8的文件,用javac -encoding GBK HelloWorld.java编译或者反过来,都会出错,这个就是我们经常在eclipse遇到的,在某个class因为有中文的comments而不能保存的错误。

b)在eclipse中不论你对项目指定了UTF-8或者是GBK,那么它对应的源文件以及在编译时用的charset默认都是一样的,所以不会现编译时的乱码或者不能保存的问题,一般比较多的出现此类问题是当你导入一个不是你当前的eclipse环境创建的项目的时候,才会出现(如何避免,后面也会提到)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: