Java 编码 字符集
Java 编码 字符集
@author ixenos
- 1. 字符集
a) 字符集建立了两字节Unicode码元序列与使用本地字符编码方式的字节序列之间的映射。
b) 为了兼容其它命名,每个字符集都有许多别名,Charset对象的aliases方法可以返回由别名构成的Set对象
i. Set<String> aliases = charset.aliases();
ii. for(String alias : aliases){…}
iii. 可以使用别名获得Charset对象:Charset charset =Class.forName(“UTF-8”)
c)
作者:Jim Liu
链接:https://www.zhihu.com/question/50356029/answer/120608944
来源:知乎
著作权归作者所有,转载请联系作者获得授权。TL;DR
字符集:收录了若干字符,并且对它们编号索引。
字符编码:将一种字符集当中的编号索引,使用计算机能处理的技术要求和格式(通常是以字节为最小单位)做二进制实现。
----分割线----
GB2312是字符集,也是字符编码,收录量大约几千个字符。
GB18030是字符集,也是字符编码,是对GB2312的一个巨大扩展,收录量大约7万多字符。
以上两个是国标
GBK是微软对GB2312的扩展,兼容GB2312(而GB18030不完美兼容GBK),GBK不是国标。
----分割线----
Unicode是“万国码”字符集,同时它也是一种很朴素的编码,但少有程序会直接用这种编码。
更多程序会使用Unicode Transform Format/UTF编码,比较常见的是UTF-8和UTF-16。----分割线----
为什么不支持Unicode而造GB18030?
1、Unicode是全世界用的,受到ISO等制约,并且非常向英语妥协。它不见得是对中文字符最完美的编码方案。打个比方,UTF-8编码方式大多数中文字符需要3字节,而GB18030编码方式大多数中文字符只需要2字节。
2、GB18030是完美兼容GB2312的,这对于中文环境下的遗留系统兼容是非常好的特性。根据维基百科显示,Unicode在1992年才收录中文字符,1993年的Unicode 1.1版本中文收录量是和GB18030差不多的,而GB2312早在80年代就开始普及。并不是我们不兼容Unicode,而是Unicode不兼容我们。对于GB18030而言,他承担了扩展GB2312的作用,不是简单的造轮子搞标准分化能解释的。Windows在1995年推出了GBK,它是完美兼容GB2312的。在那个年代,互联网还不像今天这么发达,根据不同语言环境选择性价比高的编码方案,还是可以理解的。
d) 本地编码方式模式 不能表示所有的Unicode字符,如果某个字符不能显示,将被转化成“?”。
e) 一旦有了字符集,就可以在(Unicode码元的)Java字符串
和 (编码组成的)字节序列之间进行转换
i.
编码(动词 encode)Java字符串示例,即转换成byte数组,对应的一个或两个或三个或四个字节代表字符编码(名词)
ii.
String str =”…”;
iii.
ByteBuffer buffer = charset.encode(str)
;//使用对应字符集对字符串进行编码,返回ByteBuffer对象
iv.
byte[] bytes = buffer.array(); //取出该对象中的字节数组
v.
而要想解码字节序列,自然就需要一个字节缓冲区(ByteBuffer)对象,使用ByteBuffer的静态方法wrap可以将一个字节数组转化成一个ByteBuffer对象的缓冲区
vi.
byte[] bytes = …;
vii.
ByteBuffer bbuf = ByteBuffer.wrap(bytes,
offset, length);
viii.
CharBuffer cbuf = charset.decode(bbuf);//返回CharBuffer对象
ix.
String str = cbuf.toString();
扩展阅读:
Java 编码 字符集的更多相关文章
- java中文乱码解决之道(四)-----java编码转换过程
前面三篇博客侧重介绍字符.编码问题,通过这三篇博客各位博友对各种字符编码有了一个初步的了解,要了解java的中文问题这是必须要了解的.但是了解这些仅仅只是一个开始,以下博客将侧重介绍java乱码是如何 ...
- 【JAVA编码专题】总结
第一部分:编码基础 为什么需要编码:用计算机看得懂的语言(二进制数)表示各种各样的字符. 一.基本概念 ASCII.Unicode.big5.GBK等为字符集,它们只定义了这个字符集内有哪些字符,以及 ...
- 【JAVA编码专题】深入分析 Java 中的中文编码问题
http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/ 几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么 ...
- java中文乱码解决之道(四)—–java编码转换过程
原文出处:http://cmsblogs.com/?p=1475 前面三篇博客侧重介绍字符.编码问题,通过这三篇博客各位博友对各种字符编码有了一个初步的了解,要了解java的中文问题这是必须要了解的. ...
- java编码问题
工作中经常遇到java编码问题,由于缺乏研究,总是无法给出确切的答案,这个周末在网上查了一些资料,在此做些汇总. 问题一:在java中读取文件时应该采用什么编码? Java读取文件的方式总体可以分为两 ...
- Java编码问题汇总
转自 http://www.blogjava.net/zhangchao/archive/2011/05/26/351051.html Thanks Java编码问题汇总 工作中经常遇到java编码问 ...
- java编码与解码(一)
转:https://blog.csdn.net/heyanxi0101/article/details/80356870 java编码与解码(一) 编码表概述和常见的编码表 概述:有字符及其对应的数值 ...
- java编码,乱码问题详解
一.常见的编码格式 1.ASCII 基础编码,英文和西欧字符. 用一个字节的低7位表示,一共128个. 0~13是控制字符如换行.回车.删除等,32~126是打印字符,键盘输入. 2.IOS-8859 ...
- 【JAVA编码专题】总结 分类: B1_JAVA 2015-02-11 15:11 290人阅读 评论(0) 收藏
第一部分:编码基础 为什么需要编码:用计算机看得懂的语言(二进制数)表示各种各样的字符. 一.基本概念 ASCII.Unicode.big5.GBK等为字符集,它们只定义了这个字符集内有哪些字符,以及 ...
随机推荐
- YARN的capacity调度器主要配置分析
yarn中一个基本的调度单元是队列. yarn的内置调度器: 1.FIFO先进先出,一个的简单调度器,适合低负载集群.2.Capacity调度器,给不同队列(即用户或用户组)分配一个预期最小容量,在每 ...
- Maven之(三)Maven插件
Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,像编译是通过maven-compile-plugin实现的.测试是通过maven-surefire-p ...
- 负载均衡,最理想使用 redis实现session共享
负载均衡在多台php服务器负载均衡的情况下,第一秒请求是a服务器,第二秒请求是b服务器, session必须放在一个公共的服务器,最理想是使用 redis实现session共享.内存的速度比磁盘访问快 ...
- SELinux开启和关闭
1.查看SELinux状态 /usr/sbin/sestatus -v 2.关闭SELinux (1)临时关闭(不用重启机器): setenforce 0 #设置SELinux成为permissive ...
- xml-DTD相关
DTD约束既可以作为一个单独的文件,也可以在XML文件内编写. 在XML文件内编写DTD:
- 目标检测中proposal的意义
在目标检测中,从很早就有候选区域的说法,也是在2008年可能就有人使用这个方法,在2014年的卷积神经网络解决目标检测问题的文章中,这个候选框方法大放异彩,先前的目标检测方法主要集中在使用滑动窗口的方 ...
- css3 box-reflect 倒影效果
语法: box-reflect:包括3个值. 1. direction 定义方向,取值包括 above . below . left . right. above: 指定倒影在对象的上边 below: ...
- Android开源库loopj的android-async-http的 JsonHttpResponseHandler 存在死循环GC_CONCURRENT
我现在用的是 AndroidAsyncHttp 1.4.4 版本,之前遇到一个很奇怪的问题, 当使用 JsonHttpResponseHandler 解析请求的页面出现服务器错误或其他情况返回的内容不 ...
- Python学习笔记——进阶篇【第九周】———线程、进程、协程篇(队列Queue和生产者消费者模型)
Python之路,进程.线程.协程篇 本节内容 进程.与线程区别 cpu运行原理 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Ev ...
- HUD 1171 Big Event in HDU(01背包)
Big Event in HDU Problem Description Nowadays, we all know that Computer College is the biggest depa ...