首页 > 字符集编码

字符集编码

Unicode编码 

最初的unicode编码是固定长度的,16位,也就是2两个字节代表一个字符,这样一共可以表示65536个字符。显然,这样要表示各种语言中所有的字符是远远不够的。Unicode4.0规范考虑到了这种情况,定义了一组附加字符编码,附加字符编码采用2个16位来表示,这样最多可以定义1048576个附加字符。所以4个字节表示一个字符。

Unicode只是一个编码规范,目前实际实现的unicode编码有:UTF-8,UTF-16等。utf-8是考虑了字符是怎么存储在计算机上。

UTF-8

utf-8是一种可变长的编码方式,使用1~6个字节表示一个符号,根据不同的符号调整字节数量。

        //ascii字符   1个字节
//        byte[] bytes = "a".getBytes("utf-8");
//        System.out.println(bytes.length); //1//希腊文2个字节
//        byte[] bytes = "α".getBytes("utf-8");
//        System.out.println(bytes.length);  //2//中文3个字节
//        byte[] bytes = "中".getBytes("utf-8");
//        System.out.println(bytes.length); //3//中文4个字节(ckj中韩日扩展表意字符)
//        byte[] bytes = "?".getBytes("utf-8");
//        System.out.println(bytes.length); //4

 

utf-8的可变长字节编码

这是种比较巧妙的设计,如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。

以"严"的编码字节数组为例,二进制表示为11100100 10111000 10100101

第一个字节开头有三个连续的1,表示该字符占用三个字节

        byte[] bytes = "".getBytes("utf-8"); //得到utf-8编码StringBuffer sb = new StringBuffer();for(int i =0 ;i) {sb.append(Integer.toBinaryString((bytes[i] & 0xFF) + 0x100).substring(1));if(i !=  bytes.length - 1) {sb.append(" ");}}System.out.println(sb.toString()); //11100100 10111000 10100101

字符a的二进制编码是 01100001 , 开头是0,表示该字节单独表示一个字符

        byte[] bytes = "a".getBytes("utf-8");StringBuffer sb = new StringBuffer();for(int i =0 ;i) {sb.append(Integer.toBinaryString((bytes[i] & 0xFF) + 0x100).substring(1));if(i !=  bytes.length - 1) {sb.append(" ");}}System.out.println(sb.toString()); //01100001

 

转载于:https://www.cnblogs.com/moris5013/p/10608245.html

更多相关:

  • 字节串bytes字节串也叫字节序列,是不可变的序列,存储以字节为单位的数据字节串表示方法:b"ABCD"b"x41x42"...字节串的构造函数:bytes() 创建一个空的字节串 ,同b””bytes(整数可迭代对象) 用可迭代对象创建一个字节串bytes(整数n) 生成n个值为0的字节串bytes(字符串,encoding='...

  • Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54894451 本文出自【赵彦军的博客】 InputStream |__FilterInputSt...

  •   一直对编码这块晕晕乎乎,今天终于看到一篇写的很清楚也很风趣的文章,转过来mark一下。 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为”字节“。再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始...

  • 我们知道在由于大端机和小端机导致网络字节序和主机序有可能是有差异的,我们可以使用系统的ntohs,ntohl,htons和htonl这些处理函数进行转换,下面是我写的一个关于ntohs在处理小端机字节序转换的函数的简单实现. 思想大致如下: 用u_int16_t的2字节16位的整形变量来存储这个整数,首先将第一个字节和该变量进行或运算...

  • 1. 三字母词 在C语言中有一种三字母词的说法,trigraph sequences,目前为止有九种三字母词,如下 ??=               #                  ??)            ]                  ??!           |         ??(      ...

  • 题目:   请你来实现一个 atoi 函数,使其能将字符串转换成整数。   首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。   当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组...

  • 联考考试考到了这个题,随机化40分,现在来秒掉它吧。   题意: 给一个字符串,求其中的一段,使得出现次数最多的字符与出现次数最少的字符的出现次数之差最大。 输入输出样例 输入样例#1: 复制 10 aabbaaabab 输出样例#1: 复制 3   我们定义$cnt[i][j]$表示区间$[1,i]$中,j出现的次数, 定义...

  • 本推文主要识别的验证码是这种:第一步: 二值化所谓二值化就是把不需要的信息通通去除,比如背景,干扰线,干扰像素等等,只剩下需要识别的文字,让图片变成2进制点阵。第二步: 文字分割为了能识别出字符,需要对要识别的文字图图片进行分割,把每个字符作为单独的一个图片看待。第三步: 标准化对于部分特殊的验证码,需要对分割后的图片进行标准化处理,...

  •   源字符串: a a 1 ~`!@#$%^&()_+-={}[];',.- + 编码后: a%20a%201%20~%60%21@%23$%25%5E&%28%29_+-=%7B%7D%5B%5D;%27,.-%20+   源字符串: 变 ~!@#¥%…………&()——+=-·{}:“;‘、《》?,。、-+A a 1 编码后:...

  • 很多同学对于编码问题都不是很清楚,计算机常见的编码格式为: ASCII ISO-8859-1 GB2312 GBK UTF-8 UTF-16 对于Python开发中,我们一般都是采用统一的编码格式:UTF-8第一行加入环境申明: #coding=utf-8 编码操作方式一般都分为:编码(encode)和解码(decode) 但是对于...

  • 函数近似方法7.1 目标预测(VE‾overline{VE}VE)7.2 随机梯度下降和半梯度下降例7.1: 1000态随机行走的状态收敛7.3 线性近似7.4 线性方法的特征构造7.4.1 Coarse Coding(粗编码)例7.2:粗编码的粗度7.4.2 Tile Coding(瓦片编码)7.4.3 实例:Tile Codin...

  • 1,Ascii和ebcic. 为了方便交流,美国人发明了ASCII编码,后来被确认为国际标准。后来以发明了EBCDIC编码。 一般地说,开放的操作系统(LINUX 、WINDOWS等)采用ASCII 编码,而大型主机系统(MVS 、OS/390等)采用EBCDIC 编码。在发送数据给对方前,需要事先告知对方自己所使用的编码,或者通过...

  • Unicode字符集中收录110多万个字符集合。UTF-8(8-bit Unicode Transformation Format),是一种针对 Unicode 的可变长度字符编码方式。使用一到四个字节来编码 Unicode 字符 在计算机内存中统一使用Unicode编码,当需要保存到硬盘或者需要传输时,转换为UTF—8编码。 字符...

  • ----------------基本概念-------------------------------一.位: 计算机存储信息的最小单位,称之为位(bit),音译比特,二进制的一个“0”或一个“1”叫一位。 二.字节 字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位,8个二进制位组成1个...