精华内容
下载资源
问答
  • 1,UTF-8在python的开始处,#coding:utf-8或者#coding=utf-8的作用一样,声明Python代码的文本格式是UTF-8,按照这种格式来读取程序。如下编写一个脚本:如果不添加#coding=utf-8,脚本有中文时程序会报错2,Unicode和...

    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即可。

    展开全文
  • 几谢谢你的耐心解答,虽然没有说什么,。哈哈这就是不兼容的代价回复@yak:刚刚看了DarkAngel朋友的回复,看了官网的介绍。自己没有英文的功底,借助百度翻译慢慢的拼接理解大概意思。现在看到了你的回复,方便很多,...

    几谢谢你的耐心解答,虽然没有说什么,。哈哈

    这就是不兼容的代价

    回复@yak:刚刚看了DarkAngel朋友的回复,看了官网的介绍。自己没有英文的功底,借助百度翻译慢慢的拼接理解大概意思。现在看到了你的回复,方便很多,等下在继续对比一下官网的。理解再深刻一些。早点休息哦。晚安。谢谢呢回复@BJ-CHEN:http://www.zhihu.com/question/19698598你好,请问下能解释一下嘛?我刚入门。谢谢你的耐心解答。早点休息哦这不是PyCharm的问题,是Python3和Python2不兼容的体现。简单来说,Python3不再有raw_input这个内置函数。这种东西看官方文档来得最快,https://docs.python.org/3/whatsnew/3.0.html#builtins,第二条PEP3111可以看到,raw_input在Python3中被重命名为了input。那就是说2.7版本的raw_input=目前3.6的input?谢谢分享呢,刚刚我重新安装一个2.7的版本发现就可以运行了,早点休息哦。我是今天才接触这门语言。谢谢开源社区的朋友耐心的解答。

    1.print不再是语句,而是函数,比如原来是print'abc'现在是print('abc')

    2.在Python3中,没有旧式类,只有新式类,也就是说不用再像这样classFoobar(object):pass显式地子类化object

    3.原来1/2(两个整数相除)结果是0,现在是0.5了

    4.新的字符串格式化方法format取代%

    5.raw_input重命名为input

    6.xrange重命名为range

    7.!=取代<>

    8.long重命名为int

    9.exceptException,e变成except(Exception)ase

    10.exec变成函数我用的最多的就是print回复@BJ-CHEN:第一行是为了让python在linux下找到python,第二行是编码问题的明确指示,没有也一般不会影响什么,建议有,尤其是编码问题,win下经常遇到#!/usr/bin/envpython#-

    -coding:utf-8--你好这两段在mac上还需要添加吗?好像我在2.7和3.6没有添加都没有报错,她是不是被当成注释了呢?

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

    千次阅读 2019-06-11 08:22:05
    BOM:byte order mark,定义字节顺序,因为网络传输中分为两种,大头和小头。uft-8不需要bom表明字节顺序,...微软在utf-8中使用bom因为这样可以把UTF-8和ASCII等编码区分开来,但这样的文件在windows之外的操作系...

    BOM:byte order mark,定义字节顺序,因为网络传输中分为两种,大头和小头。uft-8不需要bom表明字节顺序,但可以用BOM来表示编码方式,windows就是采用bom来标记文本文件的编码方式的。

    bom是为utf-16和utf-32准备的,用于标记字节顺序。微软在utf-8中使用bom是因为这样可以把UTF-8和ASCII等编码区分开来,但这样的文件在windows之外的操作系统里会带来问题。

    不含bom的UTF-8才是标准形式。UTF-8」和「带 BOM 的 UTF-8」的区别就是有没有 BOM。即文件开头有没有 U+FEFF。
    UTF-8 的网页代码不应使用 BOM,否则常常会出错。这是一个小例子: 为什么这个网页代码 <head> 内的信息会被浏览器理解为在 <body> 内?

    展开全文
  • 用一句话说明的话,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 with BOM是什么意思

    千次阅读 2014-05-02 12:25:18
    其实UTF-8 的BOM对UFT-8没有作用,为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行,
  • encoding编码的意思,在python中,Unicode类型作为编码的基础类型。...encode()方法语法:(推荐学习:Python视频教程)str.encode(encoding='UTF-8',errors='strict')参数encoding -- 要使用的编码...
  • # -*- coding: utf-8 -*- 中文编码声明注释:在文件开头加上中文声明注释,用以指定源码文件的编码格式。 当我们用记事本打开python的源文件,再另存为时,将会看到下方显示编码格式为: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...
  • 简单来说:Unicode 「字符集」UTF-8 「编码规则」其中:字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point)编码规则:将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密...
  • 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、ucs-2、ucs-4、utf-16、utf-32、utf-8     Unicode详解 版权声明:可以任意转载,但转载时必须标明原作者...可能大家都听说过 Unicode、UCS-2、UTF-8 等等词汇,但它们具体是什么意思,是什么原理,
  • 用一句话说明的话,UTF-8是一种编码格式,一个字节包含8个比特。等会,什么是编码,什么又是比特?为什么要用这个东西?那我们从基础说起,简单的介绍一下基本概念:编码我们都知道人有人的语言,计算机有计算机的...
  • 先将str按 iso-8859-1进行编码 然后再按UTF-8进行解码 还是将str按 iso-8859-1进行解码 然后再按UTF-8进行编码?
  • 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...
  • Pandas.read_csv格式奇怪的问题 除了常见的utf-8,gbk,今天发现还有utf-...可以看到在文件的首部有一个\ufeff字段,那么feff是什么意思呢? feff是一个BOM(Byte Order Mark),是一个不显示的标识字段,在utf-16或者...
  • unicode、ucs-2、ucs-4、utf-16、utf-32、utf-8 Unicode详解 版权声明:可以任意转载,但转载时必须标明原...可能大家都听说过 Unicode、UCS-2、UTF-8 等等词汇,但它们具体是什么意思,是什么原理,之间...
  • 1. 返回String解码为utf-8的字节序列; 2. 使用指定字符集解码的字节数组构造一个新的String。 From topics:http://topic.csdn.net/u/20080630/12/01273b1a-2c78-41bc-a5f1-453c30cc5bea.html
  • 确实,对中文字符而言,GBK 用两个字节存,UTF-8 用三个字节存,理论上节省空间的。实际上谁特么在乎这点儿空间,你一个网页文件能有几十兆吗?现在还有 GBK 完全历史遗留问题。GBK 国标,在 1995 年就出台了...
  • 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签名的意思就是告诉编辑器当前文件采用何种...
  • UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像...
  • 好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。 二、内容描述 那上面说了既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢? 原来...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 646
精华内容 258
关键字:

utf-8是什么意思