javaSE-IO补充-编码补充
来源:互联网 发布:aegisub for mac教程 编辑:程序博客网 时间:2024/05/04 03:31
编码表的由来
计算机只能识别二进制数据,早期由来是电信号。
为了方便应用计算机,让它可以识别各个国家的文字。
就将各个国家的文字用数字来表示,并一一对应,形成一张表。
这就是编码表。
为了方便应用计算机,让它可以识别各个国家的文字。
就将各个国家的文字用数字来表示,并一一对应,形成一张表。
这就是编码表。
常见的编码表
ASCII:美国标准信息交换码。用一个字节的7位可以表示。
ISO8859-1:拉丁码表。欧洲码表 latin
用一个字节的8位表示。
GB2312:中国的中文编码表。
GBK:中国的中文编码表升级,融合了更多的中文文字符号。
Unicode:国际标准码,融合了多种文字。
所有文字都用两个字节来表示,Java语言使用的就是unicode
UTF-8:最多用三个字节来表示一个字符。
......
/* * 字符串--->字节数组:编码。 * 字节数组--->字符串:解码 * 你好: * GBK:-60 -29 -70 -61 * UTF-8:-28 -67 -96 -27 -91 -67 * * 原则: * 编码编错了,就不用解码了。 * 编对了,解错了,有可能还有救! */
String str = "你好";//编码:byte[] arr = str.getBytes("gbk");printByte(arr);//解码:String s1 = new String(arr,"ISo8859-1");//ISO8859-1System.out.println("s1="+s1);byte[] arr1 = s1.getBytes("ISO8859-1");printByte(arr1);String s2 = new String(arr1,"GBK");System.out.println("s2="+s2);
但是如下解码无法接析 因为utf-8和GBK编码长度不同
//不太好救!String str = "谢谢";//编码:byte[] arr = str.getBytes("GBK");printByte(arr);//解码:String s1 = new String(arr,"UTF-8");System.out.println("s1="+s1);byte[] arr1 = s1.getBytes("UTF-8");printByte(arr1);//-17 -65 -67 -17 -65 -67 -17 -65 -67 String s2 = new String(arr1,"GBK");System.out.println("s2="+s2);
解码总结
如果解码过后生成的字符串是???往往是因为GBK编的码 但是用utf-8解的码
如果解码过后生成的字符串是乱码 往往是utf-8编的码 但是使用gbk解的码
因为utf-8中文往往是使用3个字节编码的 gbk是两个
中文不能用ISO-8859-1编码
如果在服务器端解码错误 需要先编码再解码
例如
我们为了实现国际化 服务器端程序总是utf-8的编码 但是服务器 例如 tomcat是iso8859-1的编码 所以肯定乱码 处理办法 先将收到的信息重新编码然后再用utf-8解码
String str=new String(request.getParamenter("name").getBytes("iso8859-1"),"utf-8");
0 0
- javaSE-IO补充-编码补充
- javaSE-IO补充 File类
- javaSE-IO补充 Properties类
- io补充
- IO补充
- io补充
- 编码补充
- JAVASE基础补充(一)
- IO流知识补充
- linux io调度补充
- IO流总结补充
- IO流4(补充
- javaday16-IO(补充)
- 补充
- 补充
- 补充
- 补充
- 补充
- Apache及Tomcat安装及配置说明
- 第十七周 用指针做形参求字符串的长度
- 改善android性能工具篇【zipalign】
- 软件工程之系统建模篇【开卷有益】
- NSString、NSMutableString
- javaSE-IO补充-编码补充
- mysql为用户赋予show databases权限
- LogBack——LogBack在项目(Web或Java)中的应用
- Tomcat绿色版本安装
- paip.提升用户体验--提升java的热部署热更新能力
- Robust Buffered Reading
- 小白逛公园 --线段树
- java正则表达式非捕获组详解
- 显示系统当前时间 “年/月/日 时:分秒”