




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
字符字符编码转换编码转换 常用编码方式常用编码方式 UTF-8UTF-8,ISO-8859-1(ISO-8859-1(单字节单字节),GBK),GBK 1.编码 String 类的 getBytes(String charset)/根据指定的编码方式编码, 并返回该字符串在该编码下的字节数组。如果使用 getBytes()不声 明编码方式则使用下操作系统默认的编码方式。 byte b = name.getByte(“UTF-8”); 2.解码 String 类的构造方法,String(byte b,String charset)/根据指定 的编码方式进行解码,即将字节数组还原成字符串。此方法返回一 个字符串。 String str = new String(b ,”UTF-8”) 3.过程 字符串先编译成 unicode 形式,再转换成 UTF-8/GBK 的字符串, 再将字符串的字节二进制取反码存储,显示在控制台的是反码的十 进制表示。如中文的“丁” ,转换成 unicode 为 4E 01 两个字节, 然后将其转化为二进制 01001111 00000001,分析可知需要 3 个 字节才能转换,所以将二进制数按从低到高依次填入格式 0800- FFFF 格式中,高位不够用 0 填充。转换后得到 E4 B8 81 三个字节, 取他们的补码再转换成十进制的符号数,组成 UTF-8 字节数组-28 - 72 -127 保存。 4.英文字符串编码和解码 举例:将字符串用三种方式编码 String name = “jay”; byte b = name.getByte(“UTF-8”); byte b = name.getByte(“ISO-8859-1”); byte b = name.getByte(“GBK”); 将每种编码获得的每个字节输出: UTF-8 编码:106 97 121 iso-8859-1 编码:106 97 121 GBK 编码:106 97 121 从结果可以看出,对于英文字符串,三种编码方式所得的字节 UnicodeUTF-8 00000000-0000007F0xxxxxxx 00000080 000007FF 110xxxxx 10xxxxxx 00000800 0000FFFF 1110xxxx 10xxxxxx 10xxxxxx 字符串Unicode 码 UTF-8 字节数组 在 java 内部被转 化 将二进制数加入 到 UTF-8 格式 中 取补码后转化成十 进制符号数 数组内容相同。所以可以在解码时,三种方式可以通用,但最 好编码的方式和解码的方式一致。如 String newname = new String(a,“UTF-8“); String newname = new String(a,“ISO-8859-1“); String newname = new String(a,“GBK“); 结果都能成功解码,而不出现乱码 UTF-8 解码:jay ISO-8859-1 解码:jay GBK 解码:jay 5.中文字符串编码与解码 String name = “周杰伦”; byte b = name.getByte(“UTF-8”); byte b = name.getByte(“ISO-8859-1”); byte b = name.getByte(“GBK”); 将中文字符串编码后的字节输出 UTF-8 编码:-27 -111 -88 -26 -99 -80 -28 -68 -90 ISO-8859-1 编码:63 63 63 GBK 编码:-42 -36 -67 -36 -62 -41 可见在不同的编码方式下,中文字符的字节数组表示不同, UTF-8 用三个字节表示一个汉字,GBK 用两个字节表示。因 为 ISO-8859-1 不能识别中文,所以会用英文的”?”来代替 中文,然后将“?”进行编码,所以一个中文用一个字节 63 表示。 注意:标点符号是全角还是半角。 (1)UTF-8 解码: String newname = new String(a,“UTF-8“) String newname = new String(a,“ISO-8859-1“) String newname = new String(a,“GBK“) 结果只有 UTF-8 可以解码,其他都是乱码。 UTF-8 解码:周杰伦 ISO-8859-1 解码:? GBK 解码:鍛澃浼? (2)ISO-8859-1 解码 String newname = new String(b,“UTF-8“) String newname = new String(b,“ISO-8859-1“) String newname = new String(b,“GBK“) 结果都不能解码,都是乱码。因为 ISO-8859-1 编码不能正常 识别,所以用”?”来代替中文,所以编译的是“?” ,所以三 种编码方式都可以解码,得到“?” UTF-8 解码:? ISO-8859-1 解码:? GBK 解码:? (3)GBK 解码 String newname = new String(c,“UTF-8“) String newname = new String(c,“ISO-8859-1“) String newname = new String(c,“GBK“) 结果只有 GBK 可以解码 UTF-8 解码:? ISO-8859-1 解码:? GBK 解码:周杰伦 (4)总结 从以上结果可以看出,中文字符的编码和解码的方式必须一致才能 正常解码。且 ISO-8859-1 编码方式用相同的方式解码依然是乱码, 不能正常解码。原因是因为 ISO8859-1 编码的编码不包含汉字字符, 所以无法使用 getByte()来进行编码,更别提解码了。 6编码方式的使用 (1) 在对内容进行编码时,一定要选择合适的编码方式。只含英文的 可以使用 ISO-8859-1 (2) 含中英文可以使用 UTF-8/GBK;GBK 包含全部中文字符;UTF- 8 则包含全世界所有国家需要用到的字符。 7网络传输中的编码转换 (1)选择合适的编码方式后: UTF-8 编码后的字节数组可以使用 GBK 和 ISO-8859-1 进行解码 进行传输,到达目的地后再使用 GBK 和 ISO-8859-1 进行编码取 原字节数组后,使用 UTF 进行解码就可以在目的地得到中文字符 了。 gbk 编码后只能用 iso8859-1 解码后编回去 (2)举例: String name = “周杰伦” byte b = name.getBytes(“utf-8“); String scode = new String(b,“iso-8859-1“); byte c = scode.getBytes(“iso-8859-1“); String sc = new String(c,“utf-8“); 结果 UTF-8 编码:-27 -111 -88 -26 -99 -80 -28 -68 -90 ISO-8859-1 解码后的值:? ISO-8859-1 编码:-27 -111 -88 -26 -99 -80 -28 -68 -90 UTF-8 解码后的值:周杰伦 (3)总结:虽然 ISO-8859-1 不能正
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 车辆维修报账合同协议
- 法院变卖协议书
- 品牌服务协议书合同
- 转运车辆协议书范本
- 车位协议书模板
- 公共交通行业乘客乘车协议
- 轻伤谅解协议书范本
- 路面施工安全合同协议
- 残疾职工协议书
- 比赛放弃协议书
- 新疆维吾尔自治区体废物动态信息管理平台操作手册
- 物流园区发展模式-全面剖析
- XX公司事故隐患内部报告奖励制度1
- 附件6工贸高风险企业高危领域较大以上安全风险管控清单
- 国际贸易公司后勤管理岗位职责
- 中国矿业大学专职辅导员招聘真题2024
- 骨科手术切口感染的预防与控制
- 2025年保安证考试答题技巧与试题答案
- 透析营养不良相关知识
- 中级宏观经济学知到课后答案智慧树章节测试答案2025年春浙江大学
- 智慧树知到《形势与政策(北京大学)》2025春期末答案
评论
0/150
提交评论