前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >深入理解unicode编码和utf-8编码区别

深入理解unicode编码和utf-8编码区别

原创
作者头像
暮雨
修改于 2019-08-08 03:14:58
修改于 2019-08-08 03:14:58
1.5K0
举报
文章被收录于专栏:云端漫步云端漫步

编码算法总结

计算机的世界中,充满了各种编码,编码就是将世界的事物,通过定义的一套数字规范,进而实现其可以在计算机中存储可计算。unicode码存在的目的是为了统一对世界各国各民族的语言文字进行规范的一套编码。

如下图所示

unicode码只是一种编码的规范,它没有定义在计算机中怎么对其存储,在unicode编码规范中,由于unicode编码覆盖面广阔,码值分布在0到2的32次方之间。在计算机中可以使用4byte来存储一个unicode码,但是这样的存储是不有些浪费存储空间,于时就有大神出来解决这个问题,Ken Thompson-unix之父,同时也是go语言之父,参与设计了UFT-8来解决unicode的存储问题。

unicode编码到uft-8之间的转化是怎么规范的呢?

unicode编码

UTF-8编码

<code>U+00000000 – U+0000007F </code>

<code>0xxxxxxx</code>

<code>U+00000080 – U+000007FF </code>

<code>110xxxxx 10xxxxxx

</code>|

| <code>U+00000800 – U+0000FFFF </code> | <code>1110xxxx 10xxxxxx 10xxxxxx

</code>|

| <code>U+00010000 – U+001FFFFF </code> | <code>11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

</code> |

| <code>U+00200000 – U+03FFFFFF </code>| <code>111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

</code> |

| <code>U+04000000 – U+7FFFFFFF </code>| <code>1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

</code> |

将unicode码的二进制按从右到左的顺序依次填入x位置,就可完成uft-8的转码。

实战演示

如:我们现在要将中文的"你好“转化为utf-8编码进行存储,在此我们不要使用编程语言来实现,通过手动的方式一步一步的完成转化

  1. 将"你好"转化为unicode码 在http://www.chi2ko.com/tool/CJK.htm网站中,查找"你好"两个汉字对应的unicode码值你 ----> 4F60 好 ----> 597D通过同上表中的转化规则比较,符合第三行转化规则,即1110xxxx 10xxxxxx 10xxxxxx

unicode转二进制

通过命令行工具bc进行转化

代码语言:txt
AI代码解释
复制
 ~  bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
obase=2
ibase=16
4F60
100111101100000
597D
101100101111101

转化实现

代码语言:txt
AI代码解释
复制
100 111101 100000  ----> 11100100 10111101 10100000(你)
101 100101 111101  ----> 11100101 10100101 10111101(好)

验证

代码语言:txt
AI代码解释
复制
package main

import (
	"fmt"
)

func main() {
	var aa = "你好"
	for i := 0; i < len(aa); i++ {
		fmt.Printf("%b ", aa[i])
		if (i+1)%3 == 0 {
			fmt.Println()
		}
	}
}

$go run demo.go
11100100 10111101 10100000
11100101 10100101 10111101

以上通我们手动转化的结果相同。

总结

通过以上的实验操作,你应该全面的理解了unicode编码和utf-8编码之间的区别及转化算法了吧。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 编码算法总结
  • 实战演示
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档