一.如何输出某一种编码的字符串
String ss=new String(str.getBytes("ISO-8859-2"),"GBK");
ss=ss.trim();
//str.getBytes(Stringdecode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表
//这个new String(byte[],decode)实际是使用指定的编码decode来将byte[]解析成字符串.
Unicode 是一种编码,所谓编码就是数组到字符的一种映射关系,就仅仅是一对一的映射而已。
GBK、UTF-8是编码格式,是一种序列化或者存储”编码”的一种格式而已。
编码和编码格式:
java的String使用的编码是Unicode,当String存在于内存中时(在代码中用string类型的引用对它进行操作时),是"只有编码而没有编码格式的",所以java程序中的任何String对象,说它是gbk还是utf-8都是错的,String在内存中不需要“编码格式”, 它只是一个Unicode的字符串而已。
当字符串需要在网络中传输或要被写入文件时,就需要使用编码格式了。乱码问题也因此出现。
二.各种编码格式
1.其中 ISO-8859-1 涵盖了大多数西欧语言字符,所有应用的最广泛。ISO-8859-1 仍然是单字节编码,它总共能表示 256 个字符。2.GB2312
它的全称是《信息交换用汉字编码字符集 基本集》,它是双字节编码,总的编码范围是 A1-F7,其中从 A1-A9 是符号区,总共包含 682 个符号,从 B0-F7 是汉字区,包含 6763 个汉字。
3.GBK
全称叫《汉字内码扩展规范》,是国家技术监督局为 windows95 所制定的新的汉字内码规范,它的出现是为了扩展 GB2312,加入更多的汉字,它的编码范围是 8140~FEFE(去掉 XX7F)总共有 23940 个码位,它能表示 21003 个汉字,它的编码是和 GB2312 兼容的,也就是说用 GB2312 编码的汉字可以用 GBK 来解码,并且不会有乱码。
GBK和UTF-8都是用来序列化或存储Unicode编码的数据的,但是分别是2种不同的格式,他们都是Unicode编码的实现方式;他们俩除了格式不一样之外,他们所关心的Unicode编码范围也不一样。
UTF-8考虑了很多种不同国家的字符,涵盖整个unicode码表,所以其存储一个字符的编码的时候,使用的字节长度也从1字节到4字节不等;
而GBK只考虑中文——在Unicode中的一小部分的字符的编码,所以它算好了只要2个字节就能涵盖到绝大多数常用中文(2个字节能表示6w多种字符),所以它存储一个字符的时候,所用的字节长度是固定的;
三.java当中的乱码
本质上都是由于字符串原本的编码格式与读取时解析用的编码格式不一致导致的。