`

关于Unicode和UTF-8(整理参考自网络)

 
阅读更多

简单的概括就是:Unicode是字符集,为每一个字符设置了一个编号;UTF-8是一种编码方式。

 

Unicode is charset。
UTF-8 is encoding。

 

一:字符集(Charset)
charset = char + set,char 是字符,set是集合,charset就是字符的集合。
字符集就是是这个编码方式涵盖了哪些字符,每个字符都有一个数字序号。
二:编码方式(Encoding)
编码方式就是一个字符要怎样编码成二进制字节序,或者反过来怎么解析。
也即给你一个数字序号,要编码成几个字节,字节顺序如何,或者其他特殊规则。

 

 

具体内容如下:

因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295

 

由于计算机是美国人发明的,因此,最早只有127个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122

但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。

 

你可以想得到的是,全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。

因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。

Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。

 

 

现在,捋一捋ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节。

字母A用ASCII编码是十进制的65,二进制的01000001

字符0用ASCII编码是十进制的48,二进制的00110000,注意字符'0'和整数0是不同的;

汉字已经超出了ASCII编码的范围,用Unicode编码是十进制的20013,二进制的01001110 00101101

你可以猜测,如果把ASCII编码的A用Unicode编码,只需要在前面补0就可以,因此,A的Unicode编码是00000000 01000001

 

新的问题又出现了:如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。

所以,本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间:

字符 ASCII Unicode UTF-8
A 01000001 00000000 01000001 01000001
x 01001110 00101101 11100100 10111000 10101101

 

从上面的表格还可以发现,UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。

 

搞清楚了ASCII、Unicode和UTF-8的关系,我们就可以总结一下现在计算机系统通用的字符编码工作方式:

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:

 

Unicode字符集,每个字符占用2个字节;

UTF-8编码,一个字符占用1-4个字节,其中中文占用3个字节。

 

Java的char是Unicode字符,表示的字符占用2个字节,是16位的整数。Go采用UTF-8编码的unicode,字符是32位的整数类型。

分享到:
评论

相关推荐

    [文件数据]faisunSQL自导入数据库备份程序 V4.0(UTF-8版)_faisunsql40utf8.zip

    【faisunSQL自导入数据库备份程序 V4.0(UTF-8版)】是一款专为数据库管理和备份设计的工具,适用于对SQL Server数据库进行高效、安全的备份操作。这款软件支持UTF-8编码,确保在处理多语言数据时的准确性和完整性。...

    XML实用大全----xml详细参考书

    7.4.1 UTF-8. 171 7.4.2 通用字符系统... 171 7.5 如何使用Unicode编写XML. 173 7.5.1 利用字符引用在XML文件中插入字符... 173 7.5.2 其他字符集与Unicode字符集之间的转换... 173 7.5.3 如何使用其他字符集...

    用Endnote组织参考文献目录的方法.pdf

    - 打开或新建Endnote图书馆,通过文件>导入,选择CJFD的filter,指定txt文件并设置文本转换为Unicode(UTF-8),执行导入操作。 2. 导入维普期刊数据至Endnote: - 在维普网站上选择期刊,下载全记录显示的txt文件...

    MySQL数据库系统中文乱码问题及解决方案.pdf

    * utf-8编码方式:一种支持大部分语言的字符集,为提高Unicode的编码效率,于是就出现了UTF-8编码。 * GB2312码:一种简体中文字符集,为了满足国内在计算机中使用汉字的需要由国家标准总局发布的一系列字符集国家...

    上海交通大学图书馆ENDNODE培训资料

    - 导出文献信息为EndNote支持的格式,如Unicode (UTF-8)。 - 选择导入文件,完成文献信息的存储。 #### 六、文献数据库管理 - **管理技巧**: - 分类整理: 根据研究主题对文献进行分类。 - 标签系统: 使用标签来...

    高级PHP程序员必备知识

    - 常见的字符编码包括 ASCII、GB2312、GBK 和 UTF-8。 - ASCII 编码主要用于英文字符,最多支持 128 个字符。 - GB2312 和 GBK 是用于中文字符的编码标准,GBK 是 GB2312 的扩展,支持更多的汉字。 - UTF-8 是一种可...

    [其他类别]VeryIDE Apps 1.5.7 UTF8 Build 20090722_veryide_apps.zip

    UTF-8是一种广泛使用的Unicode字符编码方案,能够支持多种语言,确保程序的源代码可以正确地显示和处理各种字符。 在编程领域,IDE是一个重要的工具,它集成了代码编辑器、编译器、调试器和其他功能,以提高开发...

    C#的ini文件操作,解决网上未解决的Get或Set中文乱码问题

    而网上另外也有资料如何处理中文编码,例如转码为utf-8,存能解决乱码,取又出现问题。本资源我重新整理,用unicode完美解决中文乱码问题。用法: 1.声明实例 IniFile iniFile = new IniFile(HttpContext....

    教你如何将维普和CNKI导入EndNote

    - “Text Translation”必须更改为“Unicode(UTF-8)”,以防导入文献出现乱码问题。 7. 选择已保存的“RefWorks.txt”文件,执行导入操作,完成CNKI文献的导入。 通过以上步骤,可以有效地将维普和CNKI的文献...

    国家地区代码+中文名称+货币代码+货币符号+汇率+web语言缩写+日期格式+数字格式化 的sql版表格

    `entity` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '地区', `name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '货币名称', `code` varchar(100) COLLATE utf8mb4_unicode...

    自己整合的EC20调试资料

    4. **汉字UNICODE互换工具.exe**:在处理中文字符时,可能会遇到编码问题,这个工具可能用于在不同的字符编码格式(如UTF-8和GBK)之间转换,以确保EC20模块在处理汉字时的正确性。 5. **SMSPDU.exe**:SMS PDU...

    the-emoji-demo:NOVA 2018 8k简介

    1. **字符编码**:处理表情符号需要理解Unicode编码,特别是UTF-8,这是macOS广泛支持的编码格式。 2. **终端限制**:macOS终端有自己的字符限制和渲染机制,需要适配这些限制,确保正确显示大量表情。 3. **性能...

    跨站脚本攻击

    另外,非最短形式UTF-8的规范化以及对非格式良好的字节序列(codeunits)的过度消耗也是安全研究人员需要关注的问题。 最后,软件工程师和安全测试人员可以参考这份《Unicode Security: Software Vulnerability ...

    total commander

    - 支持多国语言及 Unicode:消除语言文字的鸿沟; - 支持长文件名:文件名长度最多可达 1022 字符; - 支持通配符及正则表达式:搜索及重命名更方便; - 其他功能有待您发掘…… Total Commander 9.x 系列版本...

    Notepad++.rar

    而且,Notepad++对于各种编码格式的支持也非常好,无论是ASCII、Unicode还是UTF-8,都能保证字符的正确显示,这一点对于涉及国际化和本地化的学习资料尤为关键。 另外,Notepad++的运行效率也非常高,它对系统资源...

    A Quick View of ASN.1 Notations for X.509

    UTF8String则是遵循RFC2279标准,表示使用UTF-8编码的字符串。 文档中提到的id-pkix OBJECT IDENTIFIER定义了PKIX(Public Key Infrastructure using X.509)标准中所使用的对象标识符。其中包含了很多子标识符,...

    python使用html2text库实现从HTML转markdown的方法详解

    例如,要转换一个URL,你可以使用`html2text http://eepurl.com/cK06Gn`,而要转换本地文件并指定编码方式(如UTF-8),则可以运行`html2text test.html utf-8`。 html2text命令提供了多种选项来定制转换行为,如:...

    autohotkey 1.1.15.03中文版

    为了确保脚本在不同操作系统中都能正确地执行,建议将脚本文件保存为UTF-8编码格式。这样可以减少因字符编码不一致导致的问题,尤其是在处理国际化文本时。 在软件许可方面,AutoHotkey遵循GNU通用公共许可证(GPL...

    文献检索的方法

    5. **中国期刊网检索结果的导入**:在CNKI等中文数据库中,找到导出选项,选择ENDNOTE IMPORT Unicode UTF-8格式,然后在EndNote中进行导入。 6. **使用Cite While We Write**:这是EndNote的一个强大功能,可以在...

    MySQLDBA运维笔记(总结得特别详细)

    - 创建表时选择合适的字符集,例如utf8mb4以支持全Unicode字符。 - 为表的字段创建索引可以提高查询效率,索引类型包括主键索引、普通索引、唯一索引和全文索引等。 - 使用ALTER语句对表结构进行修改,如增加、删除...

Global site tag (gtag.js) - Google Analytics