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

java中的编码问题

2016-04-16 11:03 489 查看
文本文件就是字节序列,可以是任意字节的字节序列。如果在中文机器上直接创建文本文佳,

那么该文本文件只认识ANSI编码。中文系统下,ANSI编码代表GBK编码。

如果是由其他地方创建的文本文件 再拷贝出来的则可以识别任意的编码

UTF-8编码 汉字占3个字节 英文占一个

gbk编码 汉字占2个字节 英文占1个

UTF-16be编码是java中的编码 汉字和英文都是占两个字节

.getBytes();将字符串变成byte类型

integer.toHexString();将字节流变成16进制的int类型

用什么编码将字符串变成字节流 就要用同样的编码才能将其变回去

new String(“dd”,"UTF-8");可以自己选择编码方式 缺省则是默认工程属性中默认的编码

看下边程序可以深入理解Java编码:
public class EncodeDemo {

public static void main(String[] args) throws UnsupportedEncodingException {

String s="哈喽ABC";

//转换成字节序列,用的是项目默认编码gbk
byte[] bytes1=s.getBytes();

System.out.println("项目默认编码(gbk):");
for (byte b : bytes1) {
//把字节转换成了int以16进制方式显示
// & 0xff是为了把前面的24个0去掉只留下后八位
System.out.print(Integer.toHexString(b & 0xff)+"  ");
}

System.out.println();

byte[] bytes2=s.getBytes("gbk");
System.out.println("gbk编码方式:");
//gbk编码中文占两个字符,英文占用一个字符
for (byte b : bytes2) {

System.out.print(Integer.toHexString(b & 0xff)+"  ");
}

System.out.println();

byte[] bytes3=s.getBytes("utf-8");
System.out.println("utf-8编码方式:");
//utf-8编码中文占三个字符,英文占一个字符
for (byte b : bytes3) {

System.out.print(Integer.toHexString(b & 0xff)+"  ");
}

System.out.println();
//Java是双字节编码,utf-16be
byte[] bytes4=s.getBytes("utf-16be");
System.out.println("utf-16be编码方式:");
//utf-16be中文占两个字符,英文占两个字符
for (byte b : bytes4) {

System.out.print(Integer.toHexString(b & 0xff)+"  ");
}

/*
* 当你的字节序列是某种编码格式时,把字节序列转换成
* 字符串时必须也是某种编码格式,否则会出现乱码
*/
String str1=new String(bytes4);
System.out.println();
System.out.println("字节序列转换字符串编码方式不一致时乱码:");
//字节序列是utf-16be编码模式,转换成字符串时项目默认编码gbk,此时出现乱码情况
System.out.println(str1);

//字节序列转换成字符串使用字节序列的编码方式,则不会乱码
String str2=new String(bytes4,"utf-16be");
System.out.println("字节序列转换成字符串编码方式一致时:");
System.out.println(str2);
}

}
运行结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: