在中文机器下分别创建三个文本文件,分别为:
打开文本文件之后分别如下:
前两者出现了乱码问题:
使用另存为文件时会发现,前两种文本使用的编码方式为UTF-8,后一种为ANSI编码(中文机器下代表gbk编码)
联、联通 保存时采用的编码方式为UTF-8,而中文机器下在文本编辑器中输入的文本只有ANSI编码格式才能正常显示
注:文本编辑器是可以识别任何编码方式的,如果在其他地方新建一个utf-8编码的文本文件,粘贴到机器上的某个位置,如桌面。。打开后不会出现乱码。在新建文本文件时直接编辑文本,若文本内容不是ANSI编码,就会出现乱码。
对于JAVA语言中编码方式的使用方式如下:
public static void main(String[] arg) throws Exception {
String s = "慕课网ABC";
// 转换成字节序列用的是项目默认的编码方式(该项目默认为 utf-8)
byte[] bytes1 = s.getBytes();
//utf-8编码中文占3个字节,编码英文占1个字节
for (byte b : bytes1) {
// 把字节转换成了int,以16进制的方式显示
System.out.print(Integer.toHexString(b & 0xff) + " ");
}
System.out.print("\n");
//把字符串按指定格式的编码(gbk)转换成字节
byte[] bytes2 = s.getBytes("gbk");
//gbk编码中文占两个字节,英文占1个字节
for(byte b : bytes2) {
//把字节转换成了int,以16进制方式显示
System.out.print(Integer.toHexString(b & 0xff) + " ");
}
System.out.print("\n");
//java是双字节编码 utf-16be
byte[] bytes3 = s.getBytes("utf-16be");
//utf-be 中文占用2个字节,英文占用2个字节
for(byte b : bytes3) {
System.out.print((b & 0xff) + " ");
}
System.out.print("\n");
/*
* 当你的字节序列是某种编码时,这个时候想把字节序列转换
* 成字符串时,也需要用这种编码方式,否则会出现乱码
*/
//不指定编码方式时,用项目默认的编码(当前为utf-8)
//因为bytes3编码方式为utf-16be,故会出现乱码
String str1 = new String(bytes3);
System.out.println(str1);
//改为如下形式就不会有乱码
String str2 = new String(bytes3, "utf-16be");
System.out.println(str2);
//相应的bytes1的编码方式 是默认的编码方式(utf-8)
String str3 = new String(bytes1);
String str4 = new String(bytes1, "utf-8");
System.out.println(str3 + " " + str4);
//bytes2的编码方式为gbk
String str5 = new String(bytes2, "gbk");
System.out.print(str5);
/*
* 文本文件 就是字节序列
* 可以是任意编码的字节序列
* 如果我们在中文机器上直接创建文本文件
* 那么该文本文件只认识ansi编码
* 中文系统下ansi编码代表gbk编码
* 文本文件可以识别任意类型的文本文件,若把文件拷贝到机器上则不会出现乱码
* 联通、联这是一种巧合,他们正好符合了utf-8编码的规则。
*<strong><span style="color:#ff6666;"> eclipse编辑器中的每个项目都有自己的编码方式
* 该项目设置为什么编码方式,则该项目中的文本文件必须为该编码方式
* 否则会出现乱码
* 若另外的编码方式文本内容拷贝到该项目的文本文件中,则不会出现乱码
* 因为,编辑器会自动转换成对应的编码方式显示</span></strong>
*
*/
}
eclipse中查看一个项目的文本编码方式:
右键该项目-----〉选择 Properties(属性) -----〉进入到如下界面:
可以看到被框住的部分:Text file encoding 第一行为项目默认的编码方式,可以通过第二项修改编码方式,然后,
一次Apply ---> Ok
即可修改或查看编码方式了。