编码方式
package test;import java.io.UnsupportedEncodingException;public class TestEncode {public static void main(String[] args) throws UnsupportedEncodingException {String s="编码";byte[] butf=s.getBytes("UTF-8");byte[] bgbk=s.getBytes("GBK");byte[] b8859=s.getBytes("ISO-8859-1"); //getbyte是从utf-16(因为java String 用的是utf-16) 转成其他编码方式的过程,但是 gbk的编码表与unicode表又不一样,//我只能猜测操作系统中不仅放unicode,gbk,还要放两个的对照表,http://blog.csdn.net/tge7618291/article/details/7608510 这篇文章说明确实是这样//!!!重要:只有在 string到byte才需要查对照表,byte到string 就按照各种编码方式转换成char[] 就行 这也是iso8859中文不能 string转 byte的原因PrintByte(butf);PrintByte(bgbk);PrintByte(b8859);String sutf=new String (butf,"UTF-8");String sgbk=new String (bgbk,"GBK");String siso=new String (b8859,"ISO-8859-1");System.out.println(sutf);System.out.println(sgbk);System.out.println(siso); // TODO 易出错点 输出 ??String sutf_gbk=new String (butf,"GBK");System.out.println(new String (sutf_gbk.getBytes("GBK"),"UTF-8")); // TODO 输出编码//这个代码块案例下面会讲解String ss="编";PrintByte(ss.getBytes("UTF-8"));sutf_gbk=new String (ss.getBytes("UTF-8"),"GBK");System.out.println(sutf_gbk);PrintByte(sutf_gbk.getBytes("GBK"));System.out.println(new String (sutf_gbk.getBytes("GBK"),"UTF-8")); //TODO 输出 �?String sutf_ISO=new String (butf,"ISO-8859-1");System.out.println(new String (sutf_ISO.getBytes("ISO-8859-1"),"UTF-8")); //TODO 输出 编码 ISO-8859-1 是单字节编码,所以byte[] 用ISO-8859-1转成String,再反转成原来的byte[],再解析成String 不会乱码}public static void PrintByte(byte[] b){for(byte bs:b){System.out.print(bs+"/");}System.out.print("\n");}/*编码:String和char 在内存当中统一用 UTF-16 即标准的Unicode编码方式String.getbyte ( charset ) 按照unicode 对应到 指定 charset 的方式, 把String 转换成 charset 对应的byte数组"中" print byte[] : UTF-8: -28/-72/-83/GBK: -42/-48/ISO-8859-1:63/ 因为ISO-8859-1 没有中文编码,超过了范围就会变成 3F即 63也就是‘?’字符 !! ISO-8859-1只能用于byte[] 到String的转换new String (byte[] , charset) 把byte[] 按照指定编码格式解析成String,案例String s="编";byte[] butf=s.getBytes("UTF-8");String s4=new String (butf,"GBK");String s5=new String (s4.getBytes("GBK"),"UTF-8");System.out.print(s5); 输出 �?--------------------String s="编码";byte[] butf=s.getBytes("UTF-8");String s4=new String (butf,"GBK");String s5=new String (s4.getBytes("GBK"),"UTF-8");System.out.print(s5); 输出 编码GBK与UTF-8的互转会出现不可预知的错误,这个错误是因为string 转utf-8 是变长,可能出现奇数数目的byte数组,而奇数数目的数组在byte转string时就不符合gbk的规范因为gbk是二长的编码,就可能会丢失几位,所以乱码String Byte[]的转换最好还是 UTF-8与ISO-8859 GBK与ISO-8859的转换*//*原则就是* string就是utf-16 的byte,string 到 byte 需要查编码表,而byte到string按照各编码集规则自行编码,*/}
posted on 2017-09-10 15:17 wks_keshan 阅读(123) 评论(0) 收藏 举报
浙公网安备 33010602011771号