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编码:
那么该文本文件只认识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); } }运行结果如下:
相关文章推荐
- 深入分析 Java 中的中文编码问题
- 【LeetCode】299 Bulls and Cows (java实现)
- 递归算法 未名湖边的烦恼 java
- java之Secure communication terminology
- JAVA第五次作业
- 使用Eclipse来开发Android源码
- 替换空格算法分析
- 《Java程序设计基础》 第8章手记Part 2
- JAVA I/O系统
- Java利用Rxtx进行串口通讯
- java web工程web.xml配置详解
- Java中字符串String Switch的实现原理
- 20145315 《Java程序设计》第七周学习总结
- 用javaagent来对java字节码进行变换
- 关于安装jdk和netbeans的一点问题
- 关于jmm的一些拙见(1)
- Eclipse_Android问题锦集
- 排序算法---1
- JDK5新特性之可变参数
- 整合springMVC,Mybatis的Maven项目框架