Unicode

世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。

可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode,就像它的名字都表示的,这是一种所有符号的编码。

Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字”严”。具体的符号对应表,可以查询unicode.org,或者专门的汉字对应表http://www.chi2ko.com/tool/CJK.htm。

UTF-8

互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种Unicode的实现方式。其他实现方式还包括UTF-16(字符用两个字节或四个字节表示)和UTF-32(字符用四个字节表示),不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。

UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

UTF-8的编码规则很简单,只有二条:

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

下表总结了编码规则,字母x表示可用编码的位。

Unicode符号范围 | UTF-8编码方式 
(十六进制) | (二进制) 
——————–+——————————————— 
0000 0000-0000 007F | 0xxxxxxx 
0000 0080-0000 07FF | 110xxxxx 10xxxxxx 
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx 
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

跟据上表,解读UTF-8编码非常简单。如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。

下面,还是以汉字”严”为例,演示如何实现UTF-8编码。

已知”严”的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此”严”的UTF-8编码需要三个字节,即格式是”1110xxxx 10xxxxxx 10xxxxxx”。然后,从”严”的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,”严”的UTF-8编码是”11100100 10111000 10100101”,转换成十六进制就是E4B8A5。

转载:https://blog.csdn.net/u014431852/article/details/48003321

Unicode汉字编码范围\u4E00-\u9FA5相关推荐

  1. Unicode汉字编码表-转

    Unicode汉字编码表-转 空间 1 Unicode编码表 Unicode只有一个字符集,中.日.韩的三种文字占用了Unicode中0x3000到0x9FFF的部分     Unicode目前普遍采 ...

  2. Unicode汉字编码表以及参考源码分享

    2019独角兽企业重金招聘Python工程师标准>>> 1 Unicode编码表 Unicode只有一个字符集,中.日.韩的三种文字占用了Unicode中0x3000到0x9FFF的 ...

  3. oracle u4e00 u9fa5,Oracle 判断汉字 [\u4e00-\u9fa5]

    最近由于单位提了一个需求,要判断提供的用户名称里不有全角字符,至少有两个汉字.找了半天,想通过正则表达式来解决,但测试了好久才发现,Oracle的正则函数REGEXP_LIKE 不支持"\u ...

  4. 打印unicode汉字编码字符串为乱码怎么办?

    应用代码中使用了unicode编码来使用汉字,现在需求是想把这些汉字抓出来调试. 传统使用%s打印出来的是乱码,到底该怎么办呢? 解决办法: 假如原字符串传递的指针为char * text,新建一整型 ...

  5. unicode 汉字编码表(4e00-5aff)

    CJK Unified Ideographs - Unicode Character Table - 4E00-9FFF 4E00-9FFF 一4e00 丁4e01 丂4e02 七4e03 丄4e04 ...

  6. oracle u4e00 u9fa5,oracle中文与数字正则实例代码

    在oracle中regexp_like(VALID_STR ,'^[+-]?\d+(\.\d)?\d*$'); 是用来正数字的,中文用new Regex("[\u4e00-\u9fa5]+& ...

  7. Unicode汉字编码

    U+  0   1  2  3  4  5  6  7  8  9  A  B  C  D  E  F    --------------------------------------------- ...

  8. 汉字对应的unicode编码

    在Java中采用unicode字符集,每个字符占据2个字节,unicode字符集最多可包含65 535个字符. 65 535是一个很大的数字,英文字母.俄文字母.希腊字母.日文字母.阿拉伯数字.标点符 ...

  9. Oracle正则表达式匹配中文的问题

    查资料知道中文Unicode范围是\u4e00 - \u9fa5 可是自己用来正则表达式匹配中文总是用不了Unicode.最简单举例: select regexp_replace('abc秋歌def' ...

最新文章

  1. sql优化ppt_Spark优化 | Spark 3.0 中七个必须知道的 SQL 性能优化
  2. 英语写作-Introduction
  3. 均值滤波 中值滤波 高斯平滑滤波
  4. java线程——信号量(Semaphore)+障栅(CyclicBarrier)
  5. DDD专家张逸:复杂与架构演进的关系
  6. maven如何合并两个war到一个war项目中
  7. 火星人(洛谷-P1088)
  8. Spring学习笔记--导航
  9. 编程基本功:注释不是工作的一部分,是程序员赠送给公司的
  10. markdown:轻松转成html 并加载本地图片
  11. 开运算和闭运算的性质
  12. Newtonsoft.Json.dll 的使用
  13. 【AI番外】微信小程序前后端开发
  14. Linux 配置双网卡,同时访问内外网
  15. usb口拒绝访问_插u盘拒绝访问怎么办_win7u盘插电脑上显示拒绝访问的解决方法...
  16. 英语演讲常用连接词和句子
  17. springMVC和mybatis的框架搭建
  18. 有没有这样的后浪,月薪3000
  19. 微信小程序 java农产品商城供销系统#计算机毕业设计
  20. 神州信息资金头寸管理系统连续落地多家银行,实现数智化风控管理

热门文章

  1. 为CentOS8安装中文输入法
  2. Closed socket connection for client /39.103.162.230:56100 (no session established for client)
  3. 四.自定义View MeasureSpec
  4. DROO main.py
  5. 情人节相约曼谷,来一场浪漫旅行
  6. 小程序排名第一后怎么精细运营?
  7. 使用StopWatch计算耗时
  8. 【MTK】CTSITS谷歌认证测试项常见fail项解法
  9. 原生js —— 表单验证练习(12306注册)
  10. Linux 文件处理3剑客之 awk