【三分钟让你彻底明白Java字符串编码问题(图文)】
2017-05-05 14:54
323 查看
大家好,今天我们一起来总结一下Java中的字符串编码问题、中文乱码是如何出现的、怎样预防中文乱码的出现。
我们磁盘上的装载文字的文件是由字节序列组成的,这种字节序列使用了某一种编码方式(常见的有ISO8859-1、GBK、UTF-8这些),相同的中文汉字在使用不同的编码方式的时候,占用的字节个数不一样,每个字节的大小也不一样。所以,我们在进行字符串String和字节数组byte[]之间转换的时候就要注意字节序列使用的是哪种编码。
来看看这个例子:
运行后的结果:
我们磁盘上的装载文字的文件是由字节序列组成的,这种字节序列使用了某一种编码方式(常见的有ISO8859-1、GBK、UTF-8这些),相同的中文汉字在使用不同的编码方式的时候,占用的字节个数不一样,每个字节的大小也不一样。所以,我们在进行字符串String和字节数组byte[]之间转换的时候就要注意字节序列使用的是哪种编码。
来看看这个例子:
package com.bear.demo; public class CharEncodeDemo { public static void main(String[] args) throws Exception { // 定义一个字符串,包含中文和英文 String s = "谦逊OK"; // 按照文件默认的编码转换成字节数组,本文件默认编码是GBK byte[] b1 = s.getBytes(); printBytes(b1);// 结果发现中文占2个字节,英文占1个字节 // 按照UTF-8的编码转换成字节数组 byte[] b2 = s.getBytes("UTF-8"); printBytes(b2);// 结果发现中文占3个字节,英文占1个字节 // Java使用的编码是UTF-16BE,按照UTF-16BE编码转换成字节数组 byte[] b3 = s.getBytes("UTF-16BE"); printBytes(b3);// 结果发现中文占2个字节,英文占2个字节 // 当字节序列是特定的编码时,将其转换为字符串也必须使用这种特定的编码,否则就会出现乱码 String s1 = new String(b1, "GBK"); String s2 = new String(b2, "UTF-8"); String s3 = new String(b3, "UTF-16BE"); System.out.println(s1 + "\n" + s2 + "\n" + s3); } // 将字节数组按照从前到后的顺序以16进制数的形式循环打印出来 private static void printBytes(byte[] b) { for (int i = 0; i < b.length; i++) { //字节长度是8位,所以只保留后8位。toHexString()是显示整数int的16进制形式 System.out.print(Integer.toHexString(b[i] & 0xff) + "\t"); } System.out.println(); System.out.println(); } }
运行后的结果:
相关文章推荐
- java字符串编码问题
- java处理字符编码的常见问题(最近在弄字符串设置编码写入文件)
- Java反转字符串和相关字符编码问题
- java-Dom4j 编码问题彻底解决
- java和vb进行socket通信以及java与c/c++/oc 进行socket通信时汉字字符串编码问题解决
- java中含中文字符串的编码和解码问题。
- java中字符串的编码解码问题
- Java反转字符串和相关字符编码问题
- Java反转字符串和相关字符编码的问题解决
- 一句话彻底明白java乱码问题
- Java编码问题汇总(字符串转换举例)
- java中含中文字符串的编码和解码问题
- 深度剖析java编码,彻底解决java乱码问题_1
- java中含中文字符串的编码和解码问题。
- JAVA从UTF-8编码文件读取字符串时,前边有问号的问题
- java和vb进行socket通信以及java与c/c++/oc 进行socket通信时汉字字符串编码问题解决
- java中字符串的编码解码问题
- JAVA从UTF-8编码文件读取字符串时,前边有问号的问题
- 彻底明白Java的IO系统
- 彻底明白Java的IO系统