utf 8编码(utf-8 繁体中文编码表 范围 是多少)
本文目录
utf-8 繁体中文编码表 范围 是多少
UTF-8是Unicode的一种实现方式,也就是它的字节结构有特殊要求,所以我们说一个汉字的范围是0X4E00到0x9FA5,是指unicode值,至于放在utf-8的编码里去就是由三个字节来组织,所以可以看出unicode是给出一个字符的范围,定义了这个字是码值是多少,至于具体的实现方式可以有多种多样来实现。
UTF-8是一种变长字节编码方式。对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节。
如表:
1字节 0xxxxxxx
2字节 110xxxxx 10xxxxxx
3字节 1110xxxx 10xxxxxx 10xxxxxx
4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
因此UTF-8中可以用来表示字符编码的实际位数最多有31位,即上表中x所表示的位。除去那些控制位(每字节开头的10等),这些x表示的位与UNICODE编码是一一对应的,位高低顺序也相同。
实际将UNICODE转换为UTF-8编码时应先去除高位0,然后根据所剩编码的位数决定所需最小的UTF-8编码位数。
因此那些基本ASCII字符集中的字符(UNICODE兼容ASCII)只需要一个字节的UTF-8编码(7个二进制位)便可以表示。
对于上面的问题,代码中给出的两个字节是
十六进制:C0 B1
二进制:11000000 10110001
对比两个字节编码的表示方式:
110xxxxx 10xxxxxx
提取出对应的UNICODE编码:
00000 110001
可以看出此编码并非“标准”的UTF-8编码,因为其第一个字节的“有效编码”全为0,去除高位0后的编码仅有6位。由前面所述,此字符仅用一个字节的UTF-8编码表示就够了。
JAVA在把字符还原为UTF-8编码时,是按照“标准”的方式处理的,因此我们得到的是仅有1个字节的编码。
大家可以试试运行这段代码:
public class TestUTF8 {
public static void main(String args) throws Exception {
byte bytes = {
// 00110001
{(byte)0x31},
// 11000000 10110001
{(byte)0xC0,(byte)0xB1},
// 11100000 10000000 10110001
{(byte)0xE0,(byte)0x80,(byte)0xB1},
// 11110000 10000000 10000000 10110001
{(byte)0xF0,(byte)0x80,(byte)0x80,(byte)0xB1},
// 11111000 10000000 10000000 10000000 10110001
{(byte)0xF8,(byte)0x80,(byte)0x80,(byte)0x80,(byte)0xB1},
// 11111100 10000000 10000000 10000000 10000000 10110001
{(byte)0xFC,(byte)0x80,(byte)0x80,(byte)0x80,(byte)0x80,(byte)0xB1},
};
for (int i = 0; i 《 6; i++) {
String str = new String(bytes, “UTF-8“);
System.out.println(“原数组长度:“ + bytes.length +
“/t转换为字符串:“ + str +
“/t转回后数组长度:“ + str.getBytes(“UTF-8“).length);
}
}
}
运行结果为:
原数组长度:1 转换为字符串:1 转回后数组长度:1
原数组长度:2 转换为字符串:1 转回后数组长度:1
原数组长度:3 转换为字符串:1 转回后数组长度:1
原数组长度:4 转换为字符串:1 转回后数组长度:1
原数组长度:5 转换为字符串:1 转回后数组长度:1
原数组长度:6 转换为字符串:1 转回后数组长度:1
utf-8是什么意思
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码,又称万国码。
由Ken Thompson于1992年创建。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,这使得原来处理ASCII字符的软件无须或只须做少部份修改,即可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。
在所有字符集中,最知名的可能要数被称为ASCII的8位字符集了。
它是美国标准信息交换代码(American Standard Code for Information Interchange)的缩写, 为美国英语通信所设计。它由128个字符组成,包括大小写字母、数字0-9、标点符号、非打印字符(换行符、制表符等4个)以及控制字符(退格、响铃等)组成。
如果UNICODE字符由2个字节表示,则编码成UTF-8很可能需要3个字节。而如果UNICODE字符由4个字节表示,则编码成UTF-8可能需要6个字节。用4个或6个字节去编码一个UNICODE字符可能太多了,但很少会遇到那样的UNICODE字符。
UTF-8与GBK字符集解析
简单来说,Unicode就是给世界上存在的字符都赋予唯一的二进制编码。
因为Unicode要编码所有可能的字符,那么每个字符占用的字节长度就会变多。以英文为例,一个英文字符使用ASCII码只需要一个字节,而用Unicode需要4个字节,甚至更多。并且前面的字节都是0。这样纯英文文件的存储大小就会成倍扩大,是极大的浪费。
一种变长的编码方式,基于Unicode的一种实现。它使用1--4个字节表示一个字符,根据不同的字符变化字节的长度,可以节省空间。编码规则如下:
根据上表可以看出,UTF-8剩余可以填的位数,决定了对应Unicode编码的范围。 下面举个转换的例子:
“樊“ 的unicode是6A0A(0110 1010 0000 1010),查表可知,6A0A属于第三行的范围,因此“樊“的UTF-8编码需要三个字节,即格式是 1110xxxx 10xxxxxx 10xxxxxx 。然后,从6A 0A的最后一个二进制位开始,从后向前填入格式中的x,多出的位补0。最终,“樊“的UTF-8编码是11100110 10101000 10001010(E6 A8 8A)
由此可以总结出字符用UTF-8编码的规律:
注: UTF-8并没有编码所有的Unicode的字符,只包含了第0号平面(plane)和部分1号平面的字符。这属于更深层次的探究,感兴趣的读者可以通过 UTF-8 与 Unicode字符平面映射 了解。
该字符集使用2个字节表示一个字符。简单地理解,一个小于127的字节的意义与ASCII码相同,但两个大于127的字节连在一起时,就是GB2312编码的字符。以下是两个字节的具体范围:
第一个字节的范围是0xA1(161)–0xF7(247) ; 第二个字节的范围是0xA1(161)–0xFE(254)
共收录了6763个汉字,还包括拉丁字母、希腊字母、日文字符。并对 ASCII 里已有的数字、标点、字母赋予了两个字节的编码,这就是”全角”字符,而小于127的就称为”半角”字符。
由于GB2312仅包含了常用汉字,没有编码生僻字以及繁体字,GBK就对其进行了扩展。简单地理解,只要第一个字节大于127,不管后面的字节是否大于127,就是GBK编码的字符。以下是两个字节的具体范围:
第一个字节的范围是0x81(129)–0xFE(254) ; 第二个字节范围一部分在0x40(64)–0x7E(126),另一部分在0x80(128)–0xFE(254)
这样扩展之后的编码方案被称为 GBK 标准,GBK包括了GB2312 的所有内容,提供了23940个编码,使用了21886个。
UTF-8编码汉字通常需要三个字节,而GBK只需要两个字节,所以对于纯中文、不考虑国际化,且对流量和存储大小比较敏感的应用,可以使用GBK编码节省存储空间和传输流量。
原 博文 发布在个人博客,欢迎访问!!
utf-8编码
UTF-8
一种字符集
介绍UTF-8编码规则
首先 UCS 和 Unicode 只是分配整数给字符的编码表. 现在存在好几种将一串字符表示为一串字节的方法. 最显而易见的两种方法是将 Unicode 文本存储为 2 个 或 4 个字节序列的串. 这两种方法的正式名称分别为 UCS-2 和 UCS-4. 除非另外指定, 否则大多数的字节都是这样的(Bigendian convention). 将一个 ASCII 或 Latin-1 的文件转换成 UCS-2 只需简单地在每个 ASCII 字节前插入 0x00. 如果要转换成 UCS-4, 则必须在每个 ASCII 字节前插入三个 0x00.
在 Unix 下使用 UCS-2 (或 UCS-4) 会导致非常严重的问题. 用这些编码的字符串会包含一些特殊的字符, 比如 ’’ 或 ’/’, 它们在 文件名和其他 C 库函数参数里都有特别的含义. 另外, 大多数使用 ASCII 文件的 UNIX 下的工具, 如果不进行重大修改是无法读取 16 位的字符的. 基于这些原因, 在文件名, 文本文件, 环境变量等地方, UCS-2 不适合作为 Unicode 的外部编码.
在 ISO 10646-1 Annex R 和 RFC 2279 里定义的 UTF-8 编码没有这些问题. 它是在 Unix 风格的操作系统下使用 Unicode 的明显的方法.
UTF-8 有一下特性:
UCS 字符 U+0000 到 U+007F (ASCII) 被编码为字节 0x00 到 0x7F (ASCII 兼容). 这意味着只包含 7 位 ASCII 字符的文件在 ASCII 和 UTF-8 两种编码方式下是一样的.
所有 》U+007F 的 UCS 字符被编码为一个多个字节的串, 每个字节都有标记位集. 因此, ASCII 字节 (0x00-0x7F) 不可能作为任何其他字符的一部分.
表示非 ASCII 字符的多字节串的第一个字节总是在 0xC0 到 0xFD 的范围里, 并指出这个字符包含多少个字节. 多字节串的其余字节都在 0x80 到 0xBF 范围里. 这使得重新同步非常容易, 并使编码无国界, 且很少受丢失字节的影响.
可以编入所有可能的 231个 UCS 代码
UTF-8 编码字符理论上可以最多到 6 个字节长, 然而 16 位 BMP 字符最多只用到 3 字节长.
Bigendian UCS-4 字节串的排列顺序是预定的.
字节 0xFE 和 0xFF 在 UTF-8 编码中从未用到.
下列字节串用来表示一个字符. 用到哪个串取决于该字符在 Unicode 中的序号.
U-00000000 - U-0000007F:
0xxxxxxx
U-00000080 - U-000007FF:
110xxxxx 10xxxxxx
U-00000800 - U-0000FFFF:
1110xxxx 10xxxxxx 10xxxxxx
U-00010000 - U-001FFFFF:
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 - U-03FFFFFF:
111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 - U-7FFFFFFF:
1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
xxx 的位置由字符编码数的二进制表示的位填入. 越靠右的 x 具有越少的特殊意义. 只用最短的那个足够表达一个字符编码数的多字节串. 注意在多字节串中, 第一个字节的开头“1“的数目就是整个串中字节的数目.
例如: Unicode 字符 U+00A9 = 1010 1001 (版权符号) 在 UTF-8 里的编码为:
11000010 10101001 = 0xC2 0xA9
而字符 U+2260 = 0010 0010 0110 0000 (不等于) 编码为:
11100010 10001001 10100000 = 0xE2 0x89 0xA0
这种编码的官方名字拼写为 UTF-8, 其中 UTF 代表 UCS Transformation Format. 请勿在任何文档中用其他名字 (比如 utf8 或 UTF_8) 来表示 UTF-8, 当然除非你指的是一个变量名而不是这种编码本身.
什么编程语言支持 Unicode?
在大约 1993 年之后开发的大多数现代编程语言都有一个特别的数据类型, 叫做 Unicode/ISO 10646-1 字符. 在 Ada95 中叫 Wide_Character, 在 Java 中叫 char.
ISO C 也详细说明了处理多字节编码和宽字符 (wide characters) 的机制, 1994 年 9 月 Amendment 1 to ISO C 发表时又加入了更多. 这些机制主要是为各类东亚编码而设计的, 它们比处理 UCS 所需的要健壮得多. UTF-8 是 ISO C 标准调用多字节字符串的编码的一个例子, wchar_t 类型可以用来存放 Unicode 字符
请参考
UTF-8编码
使用UTF-8编码唯一的好处是,国外的用户如果使用Windows XP英文版,浏览UTF-8编码的任何网页,无论是中文、还是日文、韩文、阿拉伯文,都可以正常显示,UTF-8是世界通用的语言编码,UTF-8的推广要归功于Google的应用,以及Blog开发者。而如果用Windows XP英文版的IE6.0浏览gb2312语言编码的网页,则会提示是否安装语言包。因此,可能会失去很多的国外浏览者。
使用gb2312编码的好处是,因为程序产生的网页文本使用ANSI编码格式,会比UTF-8文本编码节省一些体积,访问速度会稍微快一点点,大约是30:38的比例,也就是30K的ANSI编码,转为UTF-8编码是38K,当然,这个比例并不准确,是会随Unicode字符集区域的不同而变化的。
什么是UTF8编码
8位Unicode转换格式(UTF-8)是一种用于编码各种字符的相对较新的代码约定。
它是字符标识的标准,也是各种编程语言和设备的参考,有助于标准化字母,数字和其他字符的显示。
在许多情况下,UTF-8取代了一种名为美国信息交换标准码(ASCII)的旧约定。
ASCII处理英语语言文本所需的所有字符,但UTF-8为不使用英语或罗马字母的其他语言处理更多不同的符号集。UTF-8被认为是与ASCII向后兼容的。
更多文章:
视频提取器app下载(有那种直接可以把一个视频里的文字提取出来的软件吗有的话求推荐)
2024年7月28日 14:21
dnf史诗武器大全(dnf100史诗武器获取 100级史诗装备获取途径)
2024年6月25日 00:18
在手机上怎么把照片转成jpg格式?有什么软件能把图片转为文字
2024年6月29日 11:24
threatfire(threatfire和卡巴斯基访反病毒2011一起装会有冲突么最近感觉电脑总一阵一阵的卡)
2024年5月4日 07:18
迅雷搜索引擎链接(怎么设置迅雷全网搜,现在迅雷9只要点全网搜索就是搜狗搜索,有点不习惯,怎么改成百度搜索啊)
2024年6月28日 20:16