本文共 1906 字,大约阅读时间需要 6 分钟。
/*IO流-转换流的字符编码转换-ISO-8859-1和utf-8和GBK互转编码:字符串变成字节数组解码:字节数组变成字符串String-->byte[]: str.getBytes(); byte[] getBytes(Charset charset) 使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。 byte[] -->String : new String(byte[]) String(byte[] bytes, String charsetName) 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。*/import java.uitl.*;class EncodeDemo{ public static void main(String[] args) throws Exception { String s = "你好"; byte[] b1 = s.getBytes("GBK");//编码:字符串变成字节数组 输入 参数(编码表) System.out.println(Arrays.toString(b1));//打印 数组变成字符串 String s1 = new String(b1,"ISO8859-1");//解码:字节数组变成字符串,String参数(数组,编码表) 输出 System.out.println("s1="+s1); //对s1进行iso8859-1编码 byte[] b2 = s1.getBytes("ISO8859-1");//拿乱码的字符串重新编码成字节数组,输入 参数(编码表) System.out.println(Arrays.toString(b2));//打印 数组变成字符串 String s2 = new String(b2,"gbk");//解码:字节数组变成字符串,String参数(数组,编码表) 输出 System.out.println("s2="+s2); }}//ISO8859-1和GBK互转 不会出乱码 //utf-8和GBK互转会出乱码,参考其他文章,如下/*GBK编码是一个中文2个字节,而UTF-8编码是一个中文3个字节,当我们调用getBytes("UTF-8")方法时,会通过计算来增加字节。正常的情况下是两个两个的转化,但是当字节是奇数时最后1个字节转字符就会计算错误,然后直接赋予最后这个字符为?。所以我们需要创建ISO-8859-1编码的字符串,保证一个输入只有一个输出。*/import java.io.UnsupportedEncodingException;public class new_122 {public static void main(String[] args) throws UnsupportedEncodingException { String gbk ="我来了"; String iso = new String(gbk.getBytes("UTF-8"),"ISO-8859-1"); //构造方法 String(byte[] bytes, Charset charset) // 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。 //方法 返回byte[]: getBytes(Charset charset) // 使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。 //构造方法里面,再加了方法,就是先编码字节数组用UTF-8,再解码字符串用ISO-8859-1 System.out.println(new String(iso.getBytes("ISO-8859-1"),"UTF-8")); //构造方法里面,再加了方法,就是先编码字节数组用ISO-8859-1,再解码字符串用UTF-8 //总结,用ISO-8859-1做中介编码表 来 实现UTF-8 和GBK 互转,因为ISO-8859-1是单字节的,不会改变数据 }}
转载地址:http://fzzvb.baihongyu.com/