JAVA中文字节编码确认
2014-11-09 09:24
337 查看
在使用java进行程序开发时,难免会遇到中文乱码的问题,如果已经确定知道中文字符串的初始编码,问题就很简单,只需要经过java提供的编码转换的接口转换一下即可,但有时候不知道初试编码是什么,比如从文件读取或者第三方接口返回的中文,这时候就无法确定该如何进行编码转换,在遇到这个问题的时候,不能乱碰尝试,这样是很低效的,我使用的方法是将中文字符串转换成字节数组,然后对照编码表来确认编码方式.在这里做下具体记录.
先列举下几种常见编码的中文表示方式:
1 ISO-8859-1
这种编码为单字节编码,字符集里不包括中文,无法表示中文字符
2 GBK、GB2312
中文标准编码、gb2312是gbk的子集,用来表示简体中文,用两个字节表示一个中文,例如字符串"你好",转换成字节数组后,字节数组的长度为4,一个汉字对应两个字节
3 UTF-8
使用3个字节来表示一个汉字
打印的结果是:-28、-81、-64、-64、-58、-9
先转换为16进制,-28的二进制为28二进制取反后加1,28的二进制代码为:0001 1100,取反为:1110 0011 ,在加1为:1110 0100,对应的16进制为:E4
-81对应的16进制为:AF
查询编码表,"浏"对应的编码为:
GBK:E4AF
UNICODE:6D4F
所以可以确定编码为gbk编码
先列举下几种常见编码的中文表示方式:
1 ISO-8859-1
这种编码为单字节编码,字符集里不包括中文,无法表示中文字符
2 GBK、GB2312
中文标准编码、gb2312是gbk的子集,用来表示简体中文,用两个字节表示一个中文,例如字符串"你好",转换成字节数组后,字节数组的长度为4,一个汉字对应两个字节
3 UTF-8
使用3个字节来表示一个汉字
String ch = "浏览器"; byte[] array = ch.getBytes(); for(int i=0;i<array.length;i++){ System.out.print(array[i]); }
打印的结果是:-28、-81、-64、-64、-58、-9
先转换为16进制,-28的二进制为28二进制取反后加1,28的二进制代码为:0001 1100,取反为:1110 0011 ,在加1为:1110 0100,对应的16进制为:E4
-81对应的16进制为:AF
查询编码表,"浏"对应的编码为:
GBK:E4AF
UNICODE:6D4F
所以可以确定编码为gbk编码
相关文章推荐
- 深入浅出Java中文问题(二)字符,字节和编码
- 【Java基础】Java中的char是否可以存储一个中文字符之理解字符字节以及编码集
- 深入浅出Java中文问题(二)字符,字节和编码
- Java在不同的编码下面,一个中文占的字节不同
- java中的字节、字符、编码以及中文乱码问题
- JAVA中文编码问题的小体会
- Java中文&编码问题小结
- Java中文&编码问题小结(转载)
- 使用 Java 将中文字符转换成 Unicode 编码
- 中文参数传递编码后传递乱码解决(java.net.URLEncoder.encode)
- 中文参数传递编码后传递乱码解决(java.net.URLEncoder.encode)
- java中的字符,字节和编码
- Java中文问题详解,底层编码解剖
- 回复:String中如果有中文,如何保证length()返回的长度 在 Java 中字符串是以 Unicode 方式编码的,所以,无论中英文都算的长度为 1。根据你的描述,估计是想要取得英文长度为 1 中文长度为 2 的总长度吧。这个,理论上可以构造 An
- jsp,java中文乱码问题另类解决方案,jni加密、解密编码
- JAVA/J2ME中文编码问题完全解决方案
- java;jsp;tomcat;mysql;hibernate;j2ee 编码中文乱码全面解决方案
- 在Java中正确解码用Javascript:escape()编码的中文字符
- java从数据库导数据生成txt文件的中文编码问题
- JAVA的中文编码问题