Unicode 和 UTF-8 有什么区别?

作者:uuspider
链接:https://www.zhihu.com/question/23374078/answer/65352538
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

举一个例子:It's 知乎日报

你看到的unicode字符集是这样的编码表:

I 0049
t 0074
' 0027
s 00730020
知 77e5
乎 4e4e
日 65e5
报 62a5

每一个字符对应一个十六进制数字。

计算机只懂二进制,因此,严格按照unicode的方式(UCS-2),应该这样存储:

I 00000000 01001001
t 00000000 01110100
' 00000000 00100111
s 00000000 0111001100000000 00100000
知 01110111 11100101
乎 01001110 01001110
日 01100101 11100101
报 01100010 10100101

这个字符串总共占用了18个字节,但是对比中英文的二进制码,可以发现,英文前9位都是0!浪费啊,浪费硬盘,浪费流量。

怎么办?

UTF。

UTF-8是这样做的:

1. 单字节的字符,字节的第一位设为0,对于英语文本,UTF-8码只占用一个字节,和ASCII码完全相同;

2. n个字节的字符(n>1),第一个字节的前n位设为1,第n+1位设为0,后面字节的前两位都设为10,这n个字节的其余空位填充该字符unicode码,高位用0补足。

这样就形成了如下的UTF-8标记位:

0xxxxxxx
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
... ...

于是,”It's 知乎日报“就变成了:

I 01001001
t 01110100
' 00100111
s 0111001100100000
知 11100111 10011111 10100101
乎 11100100 10111001 10001110
日 11100110 10010111 10100101
报 11100110 10001010 10100101

和上边的方案对比一下,英文短了,每个中文字符却多用了一个字节。但是整个字符串只用了17个字节,比上边的18个短了一点点。

下边是课后作业:

请将”It's 知乎日报“的GB2312和GBK码(自行google)转成二进制。不考虑历史因素,从技术角度解释为什么在unicode和UTF-8大行其道的同时,GB2312和GBK仍在广泛使用。

剧透:一切都是为了节省你的硬盘和流量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468906.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web前端学习笔记:Bootstrap

转载于:https://www.cnblogs.com/mmgds/p/6681817.html

python书写风格_python书写风格

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

shell if else

if ["$IMAGE_FOR_FACTORY_TEST" true];then echo "ro.xl.factoryrebootchecktrue" elseecho "ro.xl.factoryrebootcheckfalse" fi 注意 if 前面有个空格 才到 [

计算机软件需求规格说明规范_太阳能(光伏)组件安全规范测试简介_丙观科技

太阳能组件的安全规范测试包含• 接地连续性测试(也称为接地电阻测试)• 绝缘测试 (也称为湿漏电流测试,湿绝缘电阻测试)• 耐压测试 (也称为介质耐压试验)测试设备必须满足下列标准中规定的相关测试要求• IEC 61215 地面用晶体硅光伏组件-设计鉴定和定型• IEC 61…

css 做幻灯片效果

设置一个div 盒子 <div class"ani"></div>设置css 样式 .ani{width:480px;height:320px;margin:50px auto;overflow: hidden;box-shadow: 0 0 5px rgba(0,0,0,1);background-size:cover;background-position: center;-webkit-animation-name:"loops…

报错FloatingPointError: Loss became infinite or NaN at iteration=88!

项目场景&#xff1a; Traceback (most recent call last): File "/home/yuan/桌面/shenchunhua/CondInst-master/train_net.py", line 255, in <module> args(args,), File "/home/yuan/anaconda3/envs/AdelaiNet/lib/python3.7/site-packages/d…

Android系统init进程启动及init.rc全解析

这是一篇用心写的博客&#xff0c;也希望大家用心看并帮忙找到文章的改进之处&#xff0c;谢谢&#xff1b; 服务启动机制 system/core/init/init.c文件main函数中parse_config_file(init.rc)读取并解析init.rc文件内容。将service信息放置到system/core/init/init_parser.cpp…

python variable_PyTorch中的Variable变量详解

一、了解Variable顾名思义&#xff0c;Variable就是 变量 的意思。实质上也就是可以变化的量&#xff0c;区别于int变量&#xff0c;它是一种可以变化的变量&#xff0c;这正好就符合了反向传播&#xff0c;参数更新的属性。具体来说&#xff0c;在pytorch中的Variable就是一个…

JavaScript高级程序设计---学习笔记(四)

1.全局变量不能通过delete操作符删除&#xff0c;而直接在window对象上定义的属性可以。 var age 29;window.color "red";delete age;//无法删除delete color;//可以删除alert(window.age);//29alert(window.color);//undefined 2.尝试访问未声明的变量会抛出错误&…

git commit查找提交的关键字

使用命令 git log --grepaplog 参考&#xff1a; https://stackoverflow.com/questions/1337320/how-to-grep-git-commit-diffs-or-contents-for-a-certain-word

PyTorch 报错:TypeError: exceptions must derive from BaseException

项目场景&#xff1a; PyTorch 报错&#xff1a;TypeError: exceptions must derive from BaseException 其实是个低级错误&#xff0c;我个人认为是因为没有找到要运行的载体。 问题描述 在 base_options.py 里面设置 --netG 的参数只能在这几个里面选择&#xff1a; self…

python复制sheet_python excel sheet复制

from xlwt import *对excel增加行def writeRow(tableObj,rowNum,tmpList,xlsStyleDict{}):for num,o in enumerate(tmpList):if num in xlsStyleDict:style xlsStyleDict.get(num)tableObj.write(rowNum,num,o,style)else:tableObj.write(rowNum,num,o)param fileName:文件名p…

新手入坑 java的开发语言环境

开发java程序的环境 1.下载jdk&#xff0c;从官网下载或从可靠渠道下载 2.安装jdk&#xff0c;jdk包括jre&#xff0c;把jdk和jre安装到相同的父级文件目录中 3.配置系统环境变量path&#xff0c;把jdk中的bin目录添加到path变量中&#xff0c;应该与其他路径以分号相分隔 4.编…

【WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, st】

项目场景&#xff1a; 【WARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, st】 解决方案&#xff1a; 在命令执行窗输入&#xff1a; pip install nXXXXXXX -i http://pypi.douban.com/simple --trusted-host pypi.douban.com# (其中的nXXXXXXX 是你…

C语言测试n的阶乘和x的n次方

题目描述 输入一个正数x和一个正整数n&#xff0c;求下列算式的值。要求定义两个调用函数&#xff1a;fact(n)计算n的阶乘&#xff1b;mypow(x,n)计算x的n次幂&#xff08;即xn&#xff09;&#xff0c;两个函数的返回值类型是double。 输出保留4位小数。 输入 x n 输出 数列…

自己动手写java虚拟机_自己动手写操作系统(要了解的知识点)

自己动手写操作系统(开篇)自己动手写操作系统(字符显示)说明&#xff1a;Intel 8086 或者不同的处理器&#xff0c;开机寄存器数据可能不一样&#xff0c;但是大致原理差不多了解过计算机启动的同学肯定知道&#xff0c;当计算机启动的时候 BIOS 会加载 MBR 数据 512 字节到 0x…

【PyAutoGUI操作指南】03 键盘控制功能+实现热键组合+ KEYBOARD_KEYS

4.1 write&#xff08;&#xff09;函数 import pyautogui # 使用write&#xff08;&#xff09;只能按单字符键&#xff0c;因此不能按Shift 或 F1键# 立即输入字符 pyautogui.write(Hello world!) # 依次输入字符&#xff0c;每个字符之间间隔0.25秒 pyautogui.write(Hello …

git入门基础

git基础 参考&#xff1a;官网git基础 git 文件的生命周期 文件的生命周期图&#xff1a; git中的文件可以分为4个阶段. Untracked &#xff1a; 这是目录中没有被跟踪的文件&#xff0c;即不在git项目中&#xff0c;使用 git commit 等命令对文件进行提交时不会提交这样的文件…

Android 充电LED控制

1、前言 充电LED灯控制是Android设备的基本功能&#xff0c;主要用于提示设备的电池状态&#xff0c;充电状态&#xff0c;满电状态&#xff0c;低电状态&#xff0c;很多手机厂商还使用呼吸效果来显示&#xff0c;普通的低端设备会使用两个LED灯表示&#xff0c;红灯表示充电…

【PyAutoGUI操作指南】04 消息框功能+Question+Waring+Critical+自定义消息框

PyAutoGUI利用PyMsgBox中的消息框函数提供跨平台的纯Python方式来显示JavaScript样式的消息框。 5.1 alert&#xff08;&#xff09; import pyautoguipyautogui.alert(text这里写内容, title通知框标题位置, buttonOK)5.2 confirm() import pyautoguipyautogui.alert(text这…