黑马程序员——java语言基础部分——编码解码
来源:互联网 发布:卖家怎么淘宝客推广 编辑:程序博客网 时间:2024/06/04 19:26
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
概述:
编码解码主要是字符与字节之间的转换。
解码:字节——》字符
编码:字符——》字节
编码表:
主要分为以下几种:
- ASCII:美国标准信息交换码。用一个字节的后7位来表示。
- ISO8859-1:拉丁码表,欧洲码表。用一个字节来表示。
- GB2312:中国的中文编码表。
- GBK:中国的中文编码表升级后,并融合了更过的中文字符符号
- 其中中文用两个字节表示,且这两个字节的最高位都是1,也就是说是由两个负数组成的。
- Unicode:国际标准码表,融合了世界各地的语言文字,且所有的文字都是用两个字节表示,包括字母等。
- UTF-8:一种灵活的编码表,如果文字可以用一个字节表示就用一个字节表示,如果要用两个字节表示就用两个字节表示,......,最多只能用三个字节来表示。
注意:
- 中文码表兼容ASCII
- Unicode是java文件中使用的默认语言。
- UTF-8码表的标识头:单字节的标识头是0,两个字节时的标识头是:两个字节的最高位分别是110、10,三个字节时的标识头是:三个字节的最高位分别是1110、110、10
- ISO8859-1码表不识别中文
转换
字节与字符之间的转换主要是通过IO体系中的转换流InputStreamReader、OutputStreamWriter来实现的。
InputStreamReader:字节——》字符
它使用指定charset读取字节并将其解码为字符。所使用的字符集可以由名称指定或显示给定,或者接收平台默认的字符集。并提供了close()关闭流释放资源、read()读取单个字符等方法,其中read方法的调用都会导致从底层输入流读取一个或多个字节,要启动从字节到字符的有效转换,提高效率可以使用缓冲流机制。
OutputSteamWriter:字符——》字节
它使用指定的charset将要写入流中的字符编码成字节,他使用的字符集可以由名称指定或显示给定,否则将接收平台默认的字符集。并提供了flush(),read()等方法,其中每次调用write()方法都会导致在给定字符或字符集上调用编码转换器。在写入底层输出流之前,得到的字节将在缓冲区累计。要想提高效率也可以使用缓冲流机制。
下面以代码为例来解释:
从运算的结果可以看出unicode编码字节数有8个,但是“你好A”字符串,unicode编码应该是6个,这里还有两个字节分别是-2和-1在最前面,我们通过Arrays.toString("你好A".getBytes("Unicode"))得到的结果是[-2, -1, 79, 96, 89, 125, 0, 65],所以字符串的Unicode编码的结果是在按照每个文字用两个字节表示的基础上加上2.
GBK与UTF-8的特例
“联通”的GBK编码的字节的最高位刚好是110、10刚好符合UTF的标识头,所以当我们的在文本文件中编辑联通,然后保存,再打开的时候就会是乱码,这是因为系统可能会认为联通的编码方式是UTF-8,故会在解码的时候出现无法解码,从而出现乱码。解决的办法是在“联通”前面写入其他的汉字或者字符。
0 0
- 黑马程序员——java语言基础部分——编码解码
- 黑马程序员——Java基础---数据类型、编码解码
- 黑马程序员——Java中的编码、解码问题
- 黑马程序员——c语言部分基础
- 黑马程序员——Java语言基础
- 黑马程序员——Java语言基础
- 黑马程序员——Java语言基础
- 黑马程序员——Java语言基础
- 黑马程序员——Java语言基础
- 黑马程序员——Java语言基础
- 黑马程序员—Java语言基础1
- 黑马程序员—Java语言基础2
- 黑马程序员—Java语言基础1
- 黑马程序员—Java语言基础2
- 黑马程序员—Java语言基础
- 黑马程序员—Java语言基础(数组)
- 黑马程序员—java基础语言简介
- 黑马程序员—【Java语言基础】
- oc数组排序 及转换关系
- Viterbi算法信号处理Demo
- 内部类的一些访问权限
- QQ互联出现redirect uri is illegal(100010)的踩坑记录
- jQuery 基础选择器
- 黑马程序员——java语言基础部分——编码解码
- Qt线程点滴
- Java-Oracle-Excel随机生成测试数据
- call 与 apply 的用法
- struts2标签的使用总结
- Swift-函数(Function)
- 启动linux开机后出现System program problem detected
- java.lang.UnsatisfiedLinkError: 包名.方法名([BLjava
- 安徽芜湖自愿连锁经营业合法吗?能赚钱吗?