java中的编码问题

来源:互联网 发布:微云同步盘mac版 编辑:程序博客网 时间:2024/05/18 12:39

文本文件就是字节序列,可以是任意字节的字节序列。如果在中文机器上直接创建文本文佳,

那么该文本文件只认识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";//转换成字节序列,用的是项目默认编码gbkbyte[] 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);}}
运行结果如下:


0 0
原创粉丝点击