ISO-8859-1疑问

来源:互联网 发布:sql identity off 编辑:程序博客网 时间:2024/05/22 18:23

ISO 8859-1 又称Latin-1或“西欧语言”,是国际标准化组织内ISO/IEC 8859的第一个8位字符集。它以ASCII为基础,在空置的0xA0-0xFF的范围内,加入96个字母及符号,藉以供使用附加符号的拉丁字母语言使用。

ISO-8859-1的组成:

  • 0-127 ASCII
  • 128-159 没有定义
  • 160-255 自定义

ASCII编码表
这里写图片描述

ISO-8859-1编码表
这里写图片描述

那么问题来了:

package cn.bjut.test;import javax.xml.bind.DatatypeConverter;import java.io.UnsupportedEncodingException;public class ChangeCharset {    public static void main(String[] args) throws UnsupportedEncodingException {        String str = "中国";        String result;        System.out.println(DatatypeConverter.printHexBinary(str.getBytes("UTF-8")));        String iso8859 = new String(str.getBytes("UTF-8"), "ISO-8859-1");        System.out.println(iso8859);        System.out.println(DatatypeConverter.printHexBinary(iso8859.getBytes("ISO-8859-1")));        result = new String(iso8859.getBytes("ISO-8859-1"), "UTF-8");        System.out.println(result);    }}

中国对应的UTF-8编码为:E4 B8 AD E5 9B BD
当我们对它进行ISO-8859-1解码,得到:ä ¸ 软连接符 ­å › ½
解码流程:
E4:对应的十进制为228,查表得到 ä
B8:对应的十进制为184,查表得到 ¸
AD:对应的十进制为173,查表得到 ­­软连接符
E5:对应的十进制为229,查表得到 å
9B:对应的十进制为155,查表得到 没有对应的编码
BD:对应的十进制为189,查表得到 ½

当我们使用ISO-8859-1 字符集编码回去的时候,位于0-127以及160-255的字符都存在一一对应关系,而位于128-159内的字符如何进行编码呢?

debug下
这里写图片描述

可见9B被解码为\U009B

原创粉丝点击