精华内容
下载资源
问答
  • 用一句话说明的话,UTF-8是一种编码格式,一个字节包含8个比特。等会,什么是编码什么比特?为什么要用这个东西?那我们从基础说起,简单的介绍一下基本概念:编码我们都知道人有人的语言,计算机有计算机的...

    在电脑上处理文字的时候,你可能经常接触到一个名词,叫UTF-8.

    4d2c9876e3744629b6db2a0a74c07a6b.png

    你会不会觉得一丝疑惑,这到底是什么东西?

    用一句话说明的话,UTF-8是一种编码格式,一个字节包含8个比特。

    等会,什么是编码,什么又是比特?为什么要用这个东西?

    那我们从基础说起,简单的介绍一下基本概念:

    编码

    我们都知道人有人的语言,计算机有计算机的语言,就是机器语言,所谓的二进制,0和1,1代表有一个信号,0表示没有信号。那怎么把人的语言翻译成机器语言呢,就需要一个字典,字典就是ASCII,如下图,左边是这个行为就是编码,左边是机器可以识别的ASCII码,右面是代表的字符,比如 00100001 代表 "!", 从左到右转换就是解码 (decode),从右到左就是编码 (encode)。

    71688fa8101897575dafad28505b84de.png

    因为ASIIC码有8位数,每位是一个比特 (bit),8位就是一个字节 (byte)。除了第一位是0, 其他7位都可以有0 或者 1 两个选择,所以ASCII 一共可以表示 2^7 ,也就是128个字符。包括a-z 大小写,0-9 数字 和一些标点符号等。其中真正可读的只有95 个字符,其他的都是一些控制符,比如NUL,代表NULL。

    对于英语来说, ASCII 包括所有的字母了,但是对于其他的语言来说,比如汉语,当然95个字符远远不够。有人说ASCII的第一位只能是0很浪费,如果也可以是1 的话, 就会多128个组合,一共256个。然而这样也不够。所以我们有:

    多字节编码

    上述编码是单字节编码, 也就是只有8个比特。如果想匹配多于256个字符的语言,一个字节显然不够,用两个字节的话,16比特,可以编码65536个字符,BIG-5就是一个双字节编码方式,它包括大多数中文繁体字,GB18030 则包括繁体和简体。比如:

    a77fe1a75a1571af15f61cd5f8fdeb28.png

    这样每种语言可能都有他们的编码体系,用着不同的字节,对于人和机器来说,这样都很容易混乱。所以我们有:

    统一编码 Unicode

    像上文说的,对于一些语言单字节编码不够,所以采用双字节,双字节也不够的时候可以采用三字节,甚至四字节,字节是不是越多越好呢?并不是,因为字节用的越多,那些用单字节就能表示的字符会增加很多个0, 浪费很多容量。比如 A 可能就是00000000 00000000 00000000 01000001, 这样就没有必要了。

    如果一个人想写不同的语言,那他最好使用Unicode。 Unicode 用多少个字节呢?

    0个。

    因为Unicode其实不是一种编码, 而是定义了一个表, 表中为世界上每种语言中的每个字符设定了统一并且唯一的码位 (code point),以满足跨语言、跨平台进行文本转换的要求。在表示一个Unicode的字符时,通常会用“U+”然后紧接着一组十六进制的数字来表示这一个字符。如下图。

    136380f10d3216f0fd7c0d53b64058c9.png

    比如一个人想写一篇文章,包括英语和日语,单字节编码可以表示英语,但是显然不能满足他写日语,因为他需要3个字节才能表示一个『あ』,也就是11100011 10000001 10000010。 他可以用双字节编码,这样他只需要一个双字节,也就是00110000 01000010。所以他可以选择语言最高所需要的编码,也就是UTF-16. 如果他只需要写英语, 那UTF-8就可以。

    4e1c4fb8e7c05ec6b39607b97393c6db.png

    UTF-8

    UTF-8的特点是对不同范围的字符使用不同长度的编码。

    e482f9e8b774ac49375b50ecaeb30d22.png

    上表表示如何从一个从Unicode 转化到UTF-8 , 对于前0x7F的字符,UTF-8编码和ASCII码是一一对应的。如果一个字符在000800-00FFFF 之间,那转化到UTF-8 需要用三字节模板,使用16个码位,每个x 就是一个码位。

    比如『汉』这个字的Unicode编码是0x6C49。0x6C49在0x0800-0xFFFF之间,使用3字节模板:1110xxxx 10xxxxxx 10xxxxxx。将0x6C49写成二进制是:0110 1100 0100 1001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001。

    当然如果用16位更节约空间。对于中文而言,Unicode 16编码里面已经包含了GB18030里面的所有汉字(27484个字)。

    Unicode的好处

    如果一个语言支持Unicode, 说明它本身一个字符就是单字节,比如英语:

    >>> string_e = 'hello'
    >>> string_e[0]
    'h'

    每个字符都是一个8位的字符串。所以在Python 里用字符串的截取功能[], 就会给我们第一个字节,同时也是一个字符 h。

    如果是汉语,在UTF-8 中三个字节才能代表一个字符。如果我们同样使用截取[]:

    >>> string = '汉字'
    >>> string[0]
    'xe6'

    只会给我们返回一个「汉」这个字的第一个字节, 也就是11100110, 但是「汉」需要用11100110 10111100 10100010 才能表示。那我们要怎么才能截取汉字的第一个字符呢?

    >>> string_u = string.decode('UTF-8')
    >>> string_u[0]
    u'u6c49'
    >>> print(string_u[0].encode('UTF-8'))
    汉

    将「汉字」解码到Unicode, 这时再截取第一个字符就是一个 u 开头的Unicode了,再用UTF-8 编码, 返回的就是「汉」 这个字符了。

    在进行汉字文本分析时可能会有更多应用,本文先讲到这里。

    展开全文
  • 用一句话说明的话,UTF-8是一种编码格式,一个字节包含8个比特。等会,什么是编码什么比特?为什么要用这个东西?那我们从基础说起,简单的介绍一下基本概念:编码我们都知道人有人的语言,计算机有计算机的...

    在电脑上处理文字的时候,你可能经常接触到一个名词,叫UTF-8.

    9d676a3ecbcf651d38e99eea73108459.png

    你会不会觉得一丝疑惑,这到底是什么东西?

    用一句话说明的话,UTF-8是一种编码格式,一个字节包含8个比特。

    等会,什么是编码,什么又是比特?为什么要用这个东西?

    那我们从基础说起,简单的介绍一下基本概念:

    编码

    我们都知道人有人的语言,计算机有计算机的语言,就是机器语言,所谓的二进制,0和1,1代表有一个信号,0表示没有信号。那怎么把人的语言翻译成机器语言呢,就需要一个字典,字典就是ASCII,如下图,左边是这个行为就是编码,左边是机器可以识别的ASCII码,右面是代表的字符,比如 00100001 代表 "!", 从左到右转换就是解码 (decode),从右到左就是编码 (encode)。

    2d8e5c0ec8281989f9167ce906cabbf5.png

    因为ASIIC码有8位数,每位是一个比特 (bit),8位就是一个字节 (byte)。除了第一位是0, 其他7位都可以有0 或者 1 两个选择,所以ASCII 一共可以表示 2^7 ,也就是128个字符。包括a-z 大小写,0-9 数字 和一些标点符号等。其中真正可读的只有95 个字符,其他的都是一些控制符,比如NUL,代表NULL。

    对于英语来说, ASCII 包括所有的字母了,但是对于其他的语言来说,比如汉语,当然95个字符远远不够。有人说ASCII的第一位只能是0很浪费,如果也可以是1 的话, 就会多128个组合,一共256个。然而这样也不够。所以我们有:

    多字节编码

    上述编码是单字节编码, 也就是只有8个比特。如果想匹配多于256个字符的语言,一个字节显然不够,用两个字节的话,16比特,可以编码65536个字符,BIG-5就是一个双字节编码方式,它包括大多数中文繁体字,GB18030 则包括繁体和简体。比如:

    5eeb3cf371fd20dc45d9c7d5c14ae2ae.png

    这样每种语言可能都有他们的编码体系,用着不同的字节,对于人和机器来说,这样都很容易混乱。所以我们有:

    统一编码 Unicode

    像上文说的,对于一些语言单字节编码不够,所以采用双字节,双字节也不够的时候可以采用三字节,甚至四字节,字节是不是越多越好呢?并不是,因为字节用的越多,那些用单字节就能表示的字符会增加很多个0, 浪费很多容量。比如 A 可能就是00000000 00000000 00000000 01000001, 这样就没有必要了。

    如果一个人想写不同的语言,那他最好使用Unicode。 Unicode 用多少个字节呢?

    0个。

    因为Unicode其实不是一种编码, 而是定义了一个表, 表中为世界上每种语言中的每个字符设定了统一并且唯一的码位 (code point),以满足跨语言、跨平台进行文本转换的要求。在表示一个Unicode的字符时,通常会用“U+”然后紧接着一组十六进制的数字来表示这一个字符。如下图。

    bfa03e170d5a64167dfcd5a9ca753443.png

    比如一个人想写一篇文章,包括英语和日语,单字节编码可以表示英语,但是显然不能满足他写日语,因为他需要3个字节才能表示一个『あ』,也就是11100011 10000001 10000010。 他可以用双字节编码,这样他只需要一个双字节,也就是00110000 01000010。所以他可以选择语言最高所需要的编码,也就是UTF-16. 如果他只需要写英语, 那UTF-8就可以。

    4220eca8708d90302159b4c9f7a9ac91.png

    UTF-8

    UTF-8的特点是对不同范围的字符使用不同长度的编码。

    406298121080e393b6353efc98c67d73.png

    上表表示如何从一个从Unicode 转化到UTF-8 , 对于前0x7F的字符,UTF-8编码和ASCII码是一一对应的。如果一个字符在000800-00FFFF 之间,那转化到UTF-8 需要用三字节模板,使用16个码位,每个x 就是一个码位。

    比如『汉』这个字的Unicode编码是0x6C49。0x6C49在0x0800-0xFFFF之间,使用3字节模板:1110xxxx 10xxxxxx 10xxxxxx。将0x6C49写成二进制是:0110 1100 0100 1001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001。

    当然如果用16位更节约空间。对于中文而言,Unicode 16编码里面已经包含了GB18030里面的所有汉字(27484个字)。

    Unicode的好处

    如果一个语言支持Unicode, 说明它本身一个字符就是单字节,比如英语:

    >>> string_e = 'hello'
    >>> string_e[0]
    'h'

    每个字符都是一个8位的字符串。所以在Python 里用字符串的截取功能[], 就会给我们第一个字节,同时也是一个字符 h。

    如果是汉语,在UTF-8 中三个字节才能代表一个字符。如果我们同样使用截取[]:

    >>> string = '汉字'
    >>> string[0]
    'xe6'

    只会给我们返回一个「汉」这个字的第一个字节, 也就是11100110, 但是「汉」需要用11100110 10111100 10100010 才能表示。那我们要怎么才能截取汉字的第一个字符呢?

    >>> string_u = string.decode('UTF-8')
    >>> string_u[0]
    u'u6c49'
    >>> print(string_u[0].encode('UTF-8'))
    汉

    将「汉字」解码到Unicode, 这时再截取第一个字符就是一个 u 开头的Unicode了,再用UTF-8 编码, 返回的就是「汉」 这个字符了。

    在进行汉字文本分析时可能会有更多应用,本文先讲到这里。

    展开全文
  • 如下编写一个脚本:如果不添加#coding=utf-8,脚本有中文时程序会报错2,Unicode和UFT-8的区别Unicode 字符集UTF-8 是编码规则字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点...

    1,UTF-8

    在python的开始处,#coding:utf-8或者#coding=utf-8的作用一样,声明Python代码的文本格式是UTF-8,按照这种格式来读取程序。

    如下编写一个脚本:

    如果不添加#coding=utf-8,脚本有中文时程序会报错

    2,Unicode和UFT-8的区别

    Unicode 是字符集

    UTF-8 是编码规则

    字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point)

    编码规则:将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)

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

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

    I 0049

    t 0074

    ' 0027

    s 0073

    0020

    知 77e5

    乎 4e4e

    日 65e5

    报 62a5

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

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

    I 00000000 01001001

    t 00000000 01110100

    ' 00000000 00100111

    s 00000000 01110011

    00000000 00100000

    知 01110111 11100101

    乎 01001110 01001110

    日 01100101 11100101

    报 01100010 10100101

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

    UTF-8是这样做的:

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

    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 01110011

    00100000

    知 11100111 10011111 10100101

    乎 11100100 10111001 10001110

    日 11100110 10010111 10100101

    报 11100110 10001010 10100101

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

    python是支持Unicode的,在使用Unicode时,在字符串前加上u即可。

    展开全文
  • utf-8无BOM编码格式什么意思

    千次阅读 2018-09-23 15:46:48
    UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。 --------------------- 本文来自 浪漫鼠 的CSDN 博客 ,全文地址请点击。 BOM: Byte Order Mark UTF-8 B...

    UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。 --------------------- 本文来自 浪漫鼠 的CSDN 博客 ,全文地址请点击

    BOM: Byte Order Mark
    UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行。https://zhidao.baidu.com/question/59267263.html

    展开全文
  • UTF-8的BOM是什么意思

    千次阅读 2019-06-11 08:22:05
    BOM:byte order mark,定义字节顺序,因为网络传输中分为两种,大头和小头。uft-8不需要bom表明字节顺序,...微软在utf-8中使用bom因为这样可以把UTF-8和ASCII等编码区分开来,但这样的文件在windows之外的操作系...
  • 先将str按 iso-8859-1进行编码 然后再按UTF-8进行解码 还是将str按 iso-8859-1进行解码 然后再按UTF-8进行编码
  • UTF-8 with BOM是什么意思

    千次阅读 2014-05-02 12:25:18
    其实UTF-8 的BOM对UFT-8没有作用,为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行,
  • # -*- coding: utf-8 -*- 中文编码声明注释:在文件开头加上中文声明注释,用以指定源码文件的编码格式。...当我们用记事本打开python的源文件,再另存为时,将会看到下方显示编码格式为:UTF-8
  • unicode、ucs-2、ucs-4、utf-16、utf-32、utf-8     Unicode详解 版权声明:可以任意转载,但转载时必须标明原作者...可能大家都听说过 Unicode、UCS-2、UTF-8 等等词汇,但它们具体是什么意思,是什么原理,
  • UTF-8UTF-8 without DOM 有什么区别? 在保存非 ANSI 文件时,最好...UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采...
  • BOM: Byte Order MarkUTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,为了支持UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BO...
  • encoding是编码意思,在python中,Unicode类型作为编码的基础类型。...encode()方法语法:(推荐学习:Python视频教程)str.encode(encoding='UTF-8',errors='strict')参数encoding -- 要使用的编码...
  • UTF-8(无BOM)和UTF-8这两个有什么区别呢? BOM: Byte Order Mark字节序标记 UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,为了支持UTF-16,UTF-32才加上的 BOM,BOM签名的意思就是告诉编辑器...
  • MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf...
  • 简单来说:Unicode 「字符集」UTF-8 编码规则」其中:字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point)编码规则:将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密...
  • 补充一下知识0xff 什么意思按位或运算符 & 按位与运算符 ^ 按位异或运算符 把number转换为二进制,只取最低的8位(bit)。因为0xff二进制就是1111 1111。 & 运算,如果对应的两个bit都1,则那个bit...
  • 明显是编码问题,但是用utf-8打开文件发现是这样的: 用open打开文件看到是这样的: 可以看到在文件的首部有一个\ufeff字段,那么feff是什么意思呢? feff是一个BOM(Byte Order Mark),是一个不显示的标识字段,在...
  • UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像...
  • charset=utf-8" pageEncoding="utf-8"%> (2): 解析: (1): 第一阶段:将jsp编译成Servlet(.java)文件。用到的指令pageEncoding,根据pageEncoding=“XXX”的指示,找到编码的规则为“XXX”,服务器在将...
  • UTF-8 BOM

    2017-06-29 17:42:45
    UTF-8(无BOM)和UTF-8这两个有什么区别 BOM: Byte Order Mark UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,为了支持UTF-16,UTF-32才加上的 BOM,BOM签名的意思就是告诉编辑器当前文件采用何种...
  • 好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。 二、内容描述 那上面说了既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢? 原来...
  • 我们以为例子来说明: ... content(内容类型):这个网页的格式是文本的 ...charset(编码):这个网页的编码是UTF-8,需要注意的是这个是网页内容的编码,而不是文件本身的. 编码不用说,content常见的还有xml等类型.meta
  • 意思是:指定字符的编码、解码格式mysql数据库用的gbk编码,而你项目的mysql数据库需要的是utf-8编码,所以在url后面添加?useUnicode=true&characterEncoding=utf-8",表示(1)数据库在存放...
  • utf-8的问题

    2016-02-03 16:20:26
    UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像...
  • 是什么意思? meta是html中的元标签,其中包含了对应html的相关信息,客户端浏览器或服务器端的程序会根据这些信息进行处理。HTTP-equiv类似于HTTP的头部协议,它回应给浏览器一些有用的信息,以帮助正确和...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 244
精华内容 97
关键字:

utf-8编码是什么意思