Java IO 编码
在D:\document_oj\practice\javaIO 分别新建了联通、联想、联三个txt文件,并文件夹里面的内容为各自的文件名,然而之后再次打开三个文件,只有联想文件的内容是正确显示的,其余两个都是显示乱码。原因是编码导致的,联通文件的编码格式是ANSI,其余两个文件的编码格式是UTF-8。
如果我们在中文机器上直接创建文本文件,则该文本文件只认识ansi编码,但文件文本本身是接受任意编码的,所以如果是直接粘贴到任意一个位置下的文本文件则不会显示乱码,各种编码都支持,只有在机器上创建文本文件,才只认识ansi。
在eclipse中,什么样编码格式的项目,就只认识什么编码的文字,不然有可能出现乱码
package com.imooc.io;
public class EncodeDemo {
public static void main(String[] args) throws Exception {
String s = "丫丫 Java IO Test !";
//转换为字节序列用户的是项目默认的编码gbk
//gbk编码中一个中文占两个字节,一个字母一个字节
byte[] defaultEncode = s.getBytes();
for (byte b:defaultEncode) {
//把字节(转成了int)以16进制的方式显示
//一个字节8位,一个int32位,等于会在前面加上24个0,为了不显示前面24个0,则 & 0xff
System.out.print(Integer.toHexString(b & 0xff) + " ");
}
System.out.println();
//gbk编码下的输出
byte[] gbks= s.getBytes("gbk");
for (byte b:gbks) {
System.out.print(Integer.toHexString(b & 0xff) + " ");
}
System.out.println();
//在utf-8中中文占用三个字节,英文占用一个字节
byte[] utf_8s = s.getBytes("utf-8");
for (byte b:utf_8s) {
System.out.print(Integer.toHexString(b & 0xff) + " ");
}
System.out.println();
//java是双字节编码utf-16be
byte[] utf_16be = s.getBytes("utf-16be");
//utf-16be中文占用两个字节,英文也是占用2个字节
for (byte b:utf_16be) {
System.out.print(Integer.toHexString(b & 0xFF) + " ");
}
System.out.println();
/**
*当你的字节序列是某种编码时,这个时候想把字节序列变成
*字符串,也需要用这种编码方式,否则会出现乱码
*/
String str1 = new String(utf_16be);//用项目默认的编码
System.out.println(str1);
String str2 = new String(utf_16be, "utf-16be");
System.out.println(str2);
/**
* 文本文件 就是字节序列
* 本身可以是任意编码的字节序列
* 但是如果我们在中文机器上直接创建文本文件,该文件文本只认识ansi编码
*/
}
}

浙公网安备 33010602011771号