翻译自http://www.pixelstech.net/article/1397877200-You-know-what-UTF-8-is-when-you-see-it-

Source : sonic0002

如有版权问题请告知.

在编码的时候我们常常会看到UTF-8, GB 2312之类的字样. 可你真的了解这些编码的意义吗? 我们为什么须要这些编码呢? 在这篇文章里,  Julián
Solórzano
将会给我们介绍世界上使用范围最广/包括全部不同字符集的编码规则.

UTF-8是一种Unicode字符的编码方式, 它使用8个bit. Unicode是一种用来对不同语言中大多数字符进行编码的标准.

大约40年前, ASCII诞生了. 原始的ASCII包括128个字符, 包括大写和小写英文, 数字和标点符号, 每一个字符使用7个bit编码.

随后出现了"拓展ASCII", 它使用8个bit来包括很多其它的字符, 比方 á, é, ü. 对于这额外的128个字符空位, 出现了很多不同的代码映射集. 比方latin1, windows-1252等等(对于这128个额外字符, 没有固定的相应表, 取决于种族语言和操作系统等).

非常明显128(7bit)或256(8bit)个字符空位对于同一时候代表众多字符都是不够的. 因此Unicode作为一个能够代表差点儿全部文字系统的标准被提出了. 眼下它包括超过1000,000个字符(code point). UTF-8 是一种用来编码这些字符的方式. 在UTF-8中的一个字符能够由1个或很多其它字节(byte)组成. 前128个字符和ASCII码是一样的. 之后的字符就使用超过1个字节来进行编码. 一个独立字符中的每一个字节都以一个特殊的位顺序开头来表示此字节和前一个字节描写叙述的是同一个字符.

Table from Wikipedia:

convert_to_webp=true" alt="" style="display:block;margin-left:auto;" />

比方, á是一个Unicode字符编码,
U+00E1, 或者 225(十进制)

225的二进制是11100001.

由于须要8个bit来表示这个数字(225), 因此在UTF-8中我们须要使用2个字节来对它进行编码(原ASCII表中的前128个字符才使用1个字节, 它们仅仅用7个bit). 所以, 使用第一张表作为參考, 我们能够把这个字符编码成:

11000011
10100001

粗体部分是数字225,
非粗体的是编码必须的模式.

因此,
假设你打开了一个包括字节c3 a1的文本文件, 而且程序觉得编码格式是UTF-8, 你就会看到
á.

你真的知道你看到的UTF-8字符是什么吗?的更多相关文章

  1. Bypass WAF Cookbook

    PS.之前一直想把零零碎碎的知识整理下来,作为知识沉淀下来,正好借着wooyun峰会的机会将之前的流程又梳理了一遍,于是就有了下文.也希望整理的内容能给甲方工作者或则白帽子带来一些收获. 0x00 概 ...

  2. FusionCharts参数的详细说明和功能特性(转)

    功能特性animation                    是否动画显示数据,默认为1(True)showNames                    是否显示横向坐标轴(x轴)标签名称ro ...

  3. 《Pandoc用户指南》之一

    @(编程) 1. 描述 Pandoc是一个用于从一种标记格式转换为另一种的Haskell库,还是一个使用该库的命令行工具.它可以读取markdown格式和Textile格式(的子集).reStruct ...

  4. 【转】NI语法 JNI参考 JNI函数大全

    原文网址:http://blog.sina.com.cn/s/blog_5de73d0b0101chk1.html 一.对照表 Java类型    本地类型         描述boolean     ...

  5. ASP.NET脚本过滤-防止跨站脚本攻击[转]

    ASP.Net 1.1后引入了对提交表单自动检查是否存在XSS(跨站脚本攻击)的能力.当用户试图用<xxxx>之类的输入影响页面返回结果的时候,ASP.Net的引擎会引发一个HttpReq ...

  6. ASP.NET脚本过滤-防止跨站脚本攻击(收集别人的)

    ASP.Net 1.1后引入了对提交表单自动检查是否存在XSS(跨站脚本攻击)的能力.当用户试图用<xxxx>之类的输入影响页面返回结果的时候,ASP.Net的引擎会引发一个 HttpRe ...

  7. 【MySQL】MySQL零碎积累

    MySQL零碎积累 ■ 在给MySQL添加新用户时可以这么操作: create user 'newUser' identified by 'password'; grant all privilege ...

  8. 基于Socket的Android手机视频实时传输

    首先,简单介绍一下原理.主要是在手机客户端 (Android)通过实现Camera.PreviewCallback接口,在其onPreviewFrame重载函数里面获取摄像头当前图像数据, 然后通过S ...

  9. unicode utf8 学习记录

    显示器- unicode -系统- utf8 -存储设备 Unicode是一套复杂的字符编码标准,简单来说就是将人类使用的每个所谓字符与一个非负整数对应,并且保证不同的字符对应的整数一定不同.UTF- ...

  10. OAuth 2.0 RFC 框架 中文

    Internet Engineering Task Force (IETF) D. Hardt, Ed.Request for Comments: 6749 MicrosoftObsoletes: 5 ...

随机推荐

  1. python 关于如何把json文件里面的多条数据删除,只保留自己需要的条目

    参考博客: https://www.cnblogs.com/bigberg/p/6430095.html https://zhidao.baidu.com/question/7173208338528 ...

  2. CentOS 7安装与配置JDK8

    1.检查是否安装过JDK 2.下载安装包并上传服务器 3.安装JDK rpm -ivh jdk-8u131-linux-x64.rpm 4.查看是否安装正常 java -version 5.配置环境变 ...

  3. PhpSpreadsheet处理表格2

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  4. leetcode 31-40 easy

    38.Count and Say The count-and-say sequence is the sequence of integers with the first five terms as ...

  5. JS更改字体颜色、背景颜色

    CSS 颜色十六进制值  http://www.w3school.com.cn/cssref/css_colorsfull.asp CSS background-color 属性 body { bac ...

  6. 蚁群算法MATLAB解VRP问题

    Excel  exp12_3_2.xls内容: ANT_VRP函数: function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ANT ...

  7. [Vue CLI 3] vue inspect 的源码设计实现

    首先,请记住: 它在新版本的脚手架项目里面非常重要 它有什么用呢? inspect internal webpack config 能快速地在控制台看到对应生成的 webpack 配置对象. 首先它是 ...

  8. querySelector与getElementBy系列的区别

    getElementBy系列 document.getElementsByTagName('tag'); document.getElementById('id'); document.getElem ...

  9. 介绍(javascript调试)

    Chrome developer tool Chrome浏览器得益于其优秀的V8解释器,javascript执行速度和内存占有率表现非常优秀.对于html+css+javascript前台技术的学习或 ...

  10. Adapter小练习

    Aapter的继承关系图: Android中Adapter的是数据和视图之间的桥梁,数据在adapter中做处理,然后显示到视图上面. 一.ArrayAdapter适配器 java代码: import ...