目测是个老问题了。随便一搜,网上各种总结过。这里不辞啰嗦,尽量简洁的备忘一下。

几个链接,有道云笔记链接,都是知乎上几个问题的摘录;阮一峰的日志,1-5 还是值得参考,但是之后的部分则混淆了 Windows Unicode 和更广泛意义上的 Unicode 的区别,前者最早是将 UCS-2 标准的编码称作 Unicode,win2k 之后则替换成了 UTF-16LE with BOM,但依然称作是 Unicode,terminology 层面的混淆极易坑人。

另外一个问题:为什么 UTF-8 不需要 BOM (byte order mark) 而 UTF-16 UTF-32 之类的需要?简而言之,前者是基于字节(byte oriented)的前缀匹配的解析规则,所以,顺着字节依次解析即可正确完成 UTF-8 encoding => number index => Unicode character 的解读;而无论是 UTF-16 还是 UTF-32 都存在「填充字节」的情况,所以依赖 byte order mark 来指定大小端。stackoverflow 一篇回答值得一读另一个问题也不错。

In order to decide if a text uses UTF-16BE or UTF-16LE, the specification recommends to prepend a Byte Order Mark (BOM) to the string, representing the character U+FEFF. So, if the first two bytes of a UTF-16 encoded text file are FE, FF, the encoding is UTF-16BE. For FF, FE, it is UTF-16LE.

再附上一个问题链接这篇回答讲述了为什么 Windows 会在 Unicode 的问题上引入如此易混淆的私有术语(整体归因于历史原因 & 微软不容动摇的向后兼容理念),并指出 ANSI 其实也和美国国家标准协会也没啥关系,实际上,字符编码里经常听闻的 ANSI 实际上是系统本地的编码格式,如简体中文的 ANSI 实则是 GBK 等等…… 这条回答则站在 ASCII 的角度,阐述了 Unicode 和 UTF-8 的区别,「UTF-8 is an encoding used to translate binary data into numbers. Unicode is a character set used to translate numbers into characters.」

最后,我们以「余」为例来讨论 Unicode 字符集和 UTF-8 编码。查询来源:Unicode 联合会的 code charts 的 Unihan 字符子集,可下载 pdf 或者通过在线数据库查询。

其 numerical index 编号是 20313 即 0x4f59(二进制形式:0100 1111 0101 1001),参考上文提到的日志,可知落在 3 个字节的编码范围里(也就是说,根据 UTF-8 的编码,需要 3 个 8 位的字节来表征),即「1110xxxx 10xxxxxx 10xxxxxx」,将上述 0x4f59 填入,便得到了「11100100 10111101 10011001」也就是 0xe4bd99。可通过在线查询的结果对比分析。

Unicode vs. UTF-8 etc.的更多相关文章

  1. Unicode和UTF的关系

    目录结构: contents structure [+] 什么是USC UCS的编码方式 Unicode的来源 为什么需要Unicode Unicode的方式 Unicode和UTF UTF和Unic ...

  2. Unicode、UTF-8 和 ISO8859-1

    Unicode.UTF-8 和 ISO8859-1到底有什么区别 1.本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文" ...

  3. ascii、unicode、utf、gb等编码详解

    很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为"字节".再后来,他们又做了一些可以处理这 ...

  4. Unicode 与 UTF 字符标准

    Unicode 国际字符标准(UCS)是一个字符编码系统,它被设计用来支持世界各国不同语言书面文体之间的数据交换.处理以及显示.        Unicode用两个字节表示一个字符.前127个字符与A ...

  5. Unicode、UTF-8 和 ISO8859-1到底有什么区别

    说明:本文转载于新浪博客,旨在方便知识总结.原文地址:http://blog.sina.com.cn/s/blog_673c81990100t1lc.html 本文主要包括以下几个方面:编码基本知识, ...

  6. Delphi7中Unicode,ANSI,UTF编码问题

    注解: ANSI     'American Standard Code for Information Interchange' 美国信息互换标准代码 ANSI的'Ascii'编码 Unicode ...

  7. ASCII、UNICODE、UTF

    在计算机中,一个字节对应8位,每位可以用0或1表示,因此一个字节可以表示256种情况. ascii 美国人用了一个字节中的后7位来表达他们常用的字符,最高位一直是0,这便是ascii码. 因此asci ...

  8. 转载一篇关于unicode字符编码的文章

    很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们认为8个开关状态作为原子单位很好,于是他们把这称为"字节". 再后来,他们又做了一 ...

  9. 趣谈unicode,ansi,utf-8,unicode big endian这些编码有什么区别(转载)

    从头讲讲编码的故事.那么就让我们找个草堆坐下,先抽口烟,看看夜晚天空上的银河,然后想一想要从哪里开始讲起.嗯,也许这样开始比较好…… 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同 ...

  10. 字符编码笔记:ASCII,Unicode和UTF-8

    很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为"字节". 再后来,他们又做了一些可以处理 ...

随机推荐

  1. Python列表的三种遍历(序号和值)的方法

    #-×-coding:utf-8-*- if _name_=='_main_': list=['html','js','css','python'] #方法1 print ‘遍历列表方法1’ for ...

  2. FPGA_VHDL 学习课堂笔记001

    FPGA_VHDL 学习课堂笔记   记录说明:本文档主要记录大学期间,老师FPGA授课课堂笔记. 代码语言:VHDL 编程软件:MAX+plus II FPGA硬件:FLE-843   03月05日 ...

  3. sqlserver 收缩数据库/文件

    /******************************/ 1.右键-属性-选项-简单模式 2.右键-任务-收缩-文件 3.右键-任务-收缩-数据库 /********************* ...

  4. AD域 组策略部署U软件

    1.首先把需要部署的软件放到活动目录共享文件夹中.(只支持MSI格式的软件) 2.打开组策略管理工具. 3.选择域名右键,创建GPO. 4.在弹出的新建GPO窗口中,输入策略名称. 5.在新创建的策略 ...

  5. ./configure -build,-host,-target设置

    build:执行代码编译的主机,正常的话就是你的主机系统.这个参数一般由config.guess来猜就可以.当然自己指定也可以.host:编译出来的二进制程序所执行的主机,因为绝大多数是如果本机编译, ...

  6. CentOS7 安装并配置MySQL8.0

    安装环境 linux版本:CentOS 7.6 x64 Mysql:8.0 在CentOS中默认安装有MariaDB,但是我们需要的是MySQL,安装MySQL可以覆盖MariaDB. MariaDB ...

  7. 【c# 数据库】 多表链接

    1.inner join string sql = "select * from studentsinfo inner join teacher on teacher.姓名 = studen ...

  8. 记录下本地修改php版本的过程, 本地PHP目录位置,PHP-FPM目录位置

    由于我在Cellar下安装了多个PHP版本,所以这里记录下如何修改本地的PHP版本 cd /usr/local/bin cp php71 php cp php71-fpm php-fpm vscode ...

  9. Windows防火墙开启ping,禁ping的配置方法

    Windows 7,Win 2008 R2,2012 R2: Windows防火墙 --> 高级设置 --> 入站规则 --> 在列表里找到“文件和打印机共享(回显请求 - ICMP ...

  10. JavaSE基础知识(5)—面向对象(5.5 this和super关键字)

    一.this关键字 1.说明 this关键字代表当前类的对象,可以访问本类的属性.方法.构造器注意:谁调用该方法,则this就指谁 2.语法 访问属性: this.属性名 = 值; System.ou ...