简单说说utf-8编码格式
提到utf-8,脑海里立马出现了Unicode。那什么是utf-8, 什么是Unicode呢?简要说一下。
Unicode(Universal Multiple-Octet Coded Character Set,UCS) 是由国际组织设计,可以容纳全世界所有语言文字的编码方案。
utf (UCS Transformation Format ) 是实现Unicode的方法,utf-8 就是其中一个(以8位作为一个编码单元)版本。另外还有utf-16(16位为一个编码单元),utf-32(32位为一个编码单元)
OK,现在先不说这些太专业的东西。用数的表示来说,
想想,如果我们的前辈们规定,0要写成0000,3要写成0003,50要写成0050……
你是不是觉得很蛋疼?很费事?直接表示成0,3,50……方便省事
utf-8就是做了这么一件事。把8位以内能表示的Unicode编码用一个字节表示,16位以内能表示的Unicode编码用两个字节表示,同理,24位3字节,32位4字节
但是,计算机存储数据是连续的二进制数0,1表示的,比如:10111011001001100000111010111100001110……
天晓得你哪里是8位一个字符,哪里是16位一个字符……
utf-8就提供了一种用连续的0,1表示,还能区分1字节、2字节,3字节、4字节的处理方案。
看图(截图来自:https://www.ietf.org/rfc/rfc3629.txt):

上图表示了字符编码对应的utf-8二进制表示,可见规则如下:
单字节字符(比如ASCII对应字符):最高位用0表示
多字节字符(比如中文字符):第一个字节用n个1 表示,后面字节前两位为10 n表示该字符的字节数
这么一来就可以以字节为单位处理数据了(自己想象的,只为理解处理过程,实际未必真是这样):
1、取出一个字节
2、如果该字节的最高位是0,按单字节字符处理,找到对应Unicode编码。转1;否则,转3
3、识别该字节前面有几位1,记为n,向后再取n-1个字节,找到以这n个字节表示的数对应的编码。转1
(注意:上图中的二进制数中,只有xx表示的部分才是Unicode码,其它都是标志)
总结:Unicode是一个能表示世界上所有语言的编码集合;utf-8是一种Unicode实现方式。
想要了解更多详情,请参考:
UTF-8编码规则
简单说说utf-8编码格式的更多相关文章
- Redis 协议为例谈简单的协议分析
怎样去研究一个协议的过程,协议的格式,好处,怎么样模拟发包等,下面是一个简单的过程记录. 研究的步骤: 协议相关的资料,RFC,官方文档等.弄清楚协议工作在4层还是7层,是二进制还是文本协议等 抓包, ...
- csvkit---python一个牛逼到不行的csv处理库
先吐槽一下:不管是百度还是谷歌,查来查去除了官方文档之外就没有任何可以借鉴的例子,虽然官方文档写的挺好的.但是我一直以为是在python语言的方式运行的,结果是以命令行的方式运行的,搞得我还以为这个库 ...
- java常见字节大小存储问题
JAVA中默认的编码方式 转:http://blog.csdn.net/scyatcs/article/details/31356823 编码问题存在两个方面:JVM之内和JVM之外.1.Java文件 ...
- 码表 Unicode GBK UTF8 示例
Unicode的编码形式与对应的字符串相互转换 /** * Unicode的编码形式与对应的字符串相互转换 * @author 白乾涛 */ public class UnicodeUtils ...
- Servlet中的乱码问题及解决办法
假设现在有个form表单,当页面中提交一个包含中文的请求时,在服务端有可能出现中文乱码问题. <!DOCTYPE html> <html> <head> <m ...
- Jekyll 解决Jekyll server本地预览文章not found的问题
layout: post tags: [Jekyll] comments: true 执行Jekyll本地浏览器预览指令 bundle exec jekyll serve 进入浏览器输入127.0.0 ...
- 金九银十,收下这份 Java String 面试题
请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · Android-NoteBook 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭 ...
- javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)
javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...
- H.264编码格式简单分析
H.264的重要性不再提了.本文主要记录一下H.264的编码格式.H.264官方文档:https://github.com/jiayayao/DataSheet/tree/master/encode- ...
随机推荐
- IDEA个人常用配置记录
原文 一.常用快捷键 编辑 ⇧ + ↩:开始新的一行 ⌘ + ⇧ + ↩:行内任意位置进行换行,并自动补齐“;”.“{}” ⌘ + ⇧ + U:大小写切换 ⌥ + ⌦:删除到单词的末尾(⌦键为Fn+D ...
- flask静态html
flask使用静态html 在flask并不是所有的html都需要做成动态html,并且做成动态html在使用静态资源时要改变它的路径.所以我们有些可以使用静态html. 静态html不需要后台渲染, ...
- SpringBoot整合guava缓存
1.pom文件 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- FreeMarker学习(内建函数参考)
内容参考:http://freemarker.foofun.cn/dgui_quickstart_basics.html 一.字符串内建函数 boolean: 字符串转为布尔值.字符串必须是 true ...
- arcgis 面或线要素类上的搜索游标
import arcpy infc = arcpy.GetParameterAsText(0) # Identify the geometry field # desc = arcpy.Describ ...
- ios 报错记录
1. 运行xcode 报错:unterminated conditional directive #ifdef 缺少对应的#endif 在结尾加上就好了 2.iOS添加非(c,c++)文件引发的&qu ...
- linux服务之redis
redis wget http://download.redis.io/releases/redis-4.0.6.tar.gzcd redis-4.0.6makecd src/./redis-serv ...
- Camera 录制视频的实现
使用 Camera 录制视频, 实现步骤如下: 需要权限: android.permission.CAMERA android.permission.RECORD_AUDIO android.perm ...
- Mac下也能用抓包工具Fiddler
一直以来都是在Windows底下工作,对于抓包工具,自然而然当属Fiddler最最出色.不过Fiddler是在.Net runtime环境下运行的,所以想要在Mac下使用,有些困难. 在试过了Char ...
- OSS上传图片demo
demo整理来源https://help.aliyun.com/document_detail/32011.html /** * 示例说明 * <p> * HelloOSS是OSS Jav ...