Python中关于coding=utf-8以及中文字符前加u的解释 - CSDN博客

文章推薦指數: 80 %
投票人數:10人

写了很久的Python了,每次写之前都要在开头加上coding=utf-8,只知道是设置编码格式,但并没有太在意,今天在写socket编程时才发现编码格式的重要性。

Python中关于coding=utf-8以及中文字符前加u的解释 敲代码的quant 于 2018-02-0520:19:13 发布 48712 收藏 66 分类专栏: python 文章标签: python 编码 utf8 unicode 版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/FrankieHello/article/details/79263482 版权 python 同时被2个专栏收录 32篇文章 2订阅 订阅专栏 学python的路上 15篇文章 3订阅 订阅专栏 写了很久的Python了,每次写之前都要在开头加上coding=utf-8,只知道是设置编码格式,但并没有太在意,今天在写socket编程时才发现编码格式的重要性。

一、关于开头coding=utf-8 开头的coding=utf-8和coding:utf-8的作用是一样的。

它们的作用都是声明python代码的文本格式是utf-8编码的,也即告诉python解释器要按照utf-8编码的方式来读取程序。

如果不加这个声明,无论代码中还是注释中有中文都会报错。

以下几种方式都可以: #coding=utf-8 a=10 print'这是内容' #coding:utf-8 a=10 print'这是内容' 注意一点无论中间是:还是=,其中coding与它们之间都不能有空格。

否则也会报错。

注意:以上是针对Python2.x的版本而言,因为在Python2.x的版本中文本默认采用的是ASCII编码方式,而Python3.x的版本中,默认使用的就是UTF-8编码格式,所以就不需要在前面进行声明了。

二、关于中文字符前面的u 首先,我们先从最开始的ASCII编码开始说起,我们知道计算机在处理程序时是看不懂文字的,它眼里只有0/1数字。

所以最开始的ASCII编码是通过1个字节也就是8bit来表示英文字符。

因为8个二进制位可以表示出256中状态,所以用来表示英文字符绰绰有余,因此ASCII码只用到了8个二进制中的后七位,也就是可以得到128个字符。

但是像一些其他语言的字符想通过最多只能表示256个字符的ASCII编码来表示就不太实际了。

我们中华文明博大精深,光汉字就有超过6万多,所以必须有一种可以表示更多字符的编码方式,如常见的GB2312编码方式,它是通过两个字节来表示一个汉字,这样最多就可以表示256*256=65536个字符了。

而由于GB2312不能处理一些古汉语或者人名中的一些罕见字,所以导致了后面的GBK编码、GB18030编码方式的出现。

其中,GBK也是双字节的编码方式,并且GBK字符集中共收入了21886个汉字和图像符号。

除此之外,GBK还可以与GB2312完全兼容。

既然对于每种语言都有其对应的字符集,那么是否存在一种字符集可以包含世界上所有的符号呢。

所以产生了Unicode编码。

Unicode编码为世界上所有的语言的每个字符都设定了唯一的二进制编码,这样就可以实现跨语言进行文本转换和传输了。

通过Unicode进行编码时,不同字符所占用的位的长度是不同的,也就是说有的字符编码仅需要几位,而有的则需要十几位,这就导致了如果都采用固定长度的编码时,就会造成空间的浪费。

所以就衍生出了对于Unicode编码的不同实现方式,如常见到的UTF-8、UTF-16和UTF-32,其中UTF-8是最为常用的编码方式,它采用了变长字节的表示方式,即使用的字节数是可变的,这个变化是根据字符对应的Unicode编号的大小所变化的,即编号小的字符使用的字节数就少,编号大的字符使用的字节数就多,因此,使用的字节个数从1到4个不等。

所以,回到主题,Python中用到的字符串前面加上u的作用是声明对后面的字符串进行unicode编码,常用于中文字符串的处理。

Unicode是书写国际文本的标准方法,如果你想用你的母语来写文本的时候,就需要一个支持Unicode的编译器,Python允许处理Unicode文本,只需在字符串前加上前缀u即可。

一般英文的字符串不需要进行任何编码的处理,但是当你使用中文的时候,就需要在前面加上u了。

  最后再引用知乎上某个大佬举的例子来加深理解一下:https://www.zhihu.com/question/23374078/answer/65352538   举一个例子:It's知乎日报 你看到的unicode字符集是这样的编码表: I0049 t0074 '0027 s0073 0020 知77e5 乎4e4e 日65e5 报62a5 每一个字符对应一个十六进制数字。

计算机只懂二进制,因此,严格按照unicode的方式(UCS-2),应该这样存储: I0000000001001001 t0000000001110100 '0000000000100111 s0000000001110011 0000000000100000 知0111011111100101 乎0100111001001110 日0110010111100101 报0110001010100101 这个字符串总共占用了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标记位: 0xxxxxxx110xxxxx10xxxxxx1110xxxx10xxxxxx10xxxxxx11110xxx10xxxxxx10xxxxxx10xxxxxx111110xx10xxxxxx10xxxxxx10xxxxxx10xxxxxx1111110x10xxxxxx10xxxxxx10xxxxxx10xxxxxx10xxxxxx...... 于是,”It's知乎日报“就变成了: I01001001 t01110100 '00100111 s01110011 00100000 知111001111001111110100101 乎111001001011100110001110 日111001101001011110100101 报111001101000101010100101 和上边的方案对比一下,英文短了,每个中文字符却多用了一个字节。

但是整个字符串只用了17个字节,比上边的18个短了一点点。

另外一个汉字在UTF-8编码的情况下可能需要三个字节,而使用gbk两个字节就足够了,所以有时候为了节省流量和硬盘,在使用中文的时候,也有用gbk或者gbk2312编码的。

            敲代码的quant 关注 关注 28 点赞 踩 66 收藏 打赏 8 评论 Python中关于coding=utf-8以及中文字符前加u的解释 写了很久的Python了,每次写之前都要在开头加上coding=utf-8,只知道是设置编码格式,但并没有太在意,今天在写socket编程时才发现编码格式的重要性。

一、关于开头coding=utf-8开头的coding=utf-8和coding:utf-8的作用是一样的。

作用是声明python代码的文本格式是utf-8,python按照utf-8的方式来读取程序。

如果不加这个声明, 复制链接 扫一扫 专栏目录 #-*-coding:UTF-8-*- Stillboring的博客 05-02 2万+ 现象:最近需要抓取一些网页的信息,但发现Python的乱码问题相对Java来说,不太一样。

按照以往Java解决中文乱码问题的思路去解决Python乱码,貌似行不通,报错信息: SyntaxError:Non-ASCIIcharacter'\xe5'infile 原因:Python默认是以ASCII作为编码方式的,如果在自己的Python源码中包含了中文(或者其他的语言,比如小日本的日... python脚本解释器 六月的尾巴 01-08 254 关于脚本第一行的#!/usr/bin/python的解释,相信很多不熟悉Linux系统的同学需要普及这个知识,脚本语言的第一行,只对Linux/Unix用户适用,用来指定本脚本用什么解释器来执行。

有这句的,加上执行权限后,可以直接用./执行,不然会出错,因为找不到python解释器。

#!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin... 评论 8 您还未登录,请先 登录 后发表或查看评论 python开头utf-8_关于Python脚本开头两行的:#!/usr/bin/python和#-*-coding:utf-8-*-的作用–指定文件编码类型...... weixin_39723678的博客 01-29 332 原文网址:http://www.crifan.com/python_head_meaning_for_usr_bin_python_coding_utf-8/#!/usr/bin/python是用来说明脚本语言是python的是要用/usr/bin下面的程序(工具)python,这个解释器,来解释python脚本,来运行python脚本的。

#-*-coding:utf-8-*-是用来指定文... 为什么python文档要前加#coding=utf-8 qi_choy的博客 11-11 2万+ 因为如果不加编码方式,在python文档中加中文注释的时候,会有下列报错 File"encode.py",line5 SyntaxError:Non-ASCIIcharacter'\xe7'infileencode.pyonline1,butnoencodingdeclared;see//..python.../dev/peps/pep-0263/for... 4.coding=utf-8的作用 lzmlc0109的博客 04-18 1492 ython2: 在python2中,解释器缺省使用ascii编码进行 解释执行,在没有指定.py文件编码时,如果遇到中文字符,则直接报错:Non-ASCIIcharacterfound,butnoencodingdeclared。

通过在.py文件第一行加上#coding=utf-8/gbk,解释器就认为当前文件编码格式为utf-8/gbk,从而可以正确解释执行。

Python3: python3缺省使用utf-8进行解释执行,同时所有的字符串都是以unicode进行存储。

所以如果 coding:utf-8和coding=utf-8是什么意思? hj_0317的博客 01-07 3337 起到“设置编码格式”的作用,“utf-8”支持中文字符。

#-*-coding:UTF-8-*-的作用 weixin_45459911的博客 03-23 4933 在代码开头,我们经常能看到#--coding:UTF-8--这段代码,那么这段代码到底有什么作用呢? 因为py文件不支持中文(包括注释里的),因此需要使用这段代码将就文件编码类型改为UTF-8的类型。

这样就可以在py文件中正常输入中文而不报错了。

... python中coding=utf8的作用 技术成就梦想,梦想成就未来。

09-23 1989 Python2: 在python2中,解释器缺省使用ascii编码进行 解释执行,在没有指定.py文件编码时,如果遇到中文字符,则直接报错:Non-ASCIIcharacterfound,butnoencodingdeclared。

通过在.py文件第一行加上#coding=utf-8/gbk,解释器就认为当前文件编码格式为utf-8/gbk,从而可以正确解释执行。

... [Python]编码声明:是coding:utf-8还是coding=utf-8呢 orangleliu笔记本 04-03 7万+ 我们知道在Python源码的头文件中要声明编码方式,如果你不只是会用到ascii码,很多人都写得都有点差别: #coding=utf-8 #coding:utf-8 #-*-coding:utf-8-*-   那么怎样写才是有效地呢,哪些优势无效的呢?  可以查看下http://www.python.org/dev/peps/pep-0263/的解释 粗略的看下:   概要: ... Python代码中“#-*-coding:utf-8-*-”的作用及正确的位置 昊虹AI笔记 07-14 1269 Python代码中“#-*-coding:utf-8-*-”的作用及正确的位置 报错(UnboundLocalError:localvariable'xxx'referencedbeforeassignment)的解决办法 程序猿杂记 12-18 4万+ 今天写个程序,运行报错:UnboundLocalError:localvariable'xxx'referencedbeforeassignment(xxx为程序变量名),引发此错误的原因就是全局变量与局部变量引起的,详情请看下文: UnboundLocalError:localvariable'a'referencedbeforeassignment Jason_Linux 09-21 4359 (1)下面这种情况是不会报错的: >>>x=10 >>>defbar(): ...print(x) >>>bar() 10 (2)但是这种情况就会报UnboundLocalError的错误: >>>x= Python乱码问题解决办法 weixin_34380948的博客 04-06 328 乱码产生的原因是Python在读取时默认解码方式是用操作系统编码,如果和保存时的编码方式不一样,就会出现乱码 比如以下片段,文件保存格式是utf-8 #coding=utf-8 print'是'#输出乱码 因为windows默认的编码方式是GBK,python文件保存时使用了utf-8,在读取时,python使用GBK的编码表去解utf-8编码的字节码,因为GBK与UTF-8编... Python的编码注释#-*-coding:utf-8-*- 热门推荐 arbel的专栏 09-08 28万+ 如果要在python2的py文件里面写中文,则必须要添加一行声明文件编码的注释,否则python2会默认使用ASCII编码。

#-*-coding:utf-8-*- 问题就来了,为什么要如此声明? 首先请参考python的PEPhttp://www.python.org/dev/peps/pep-0263/ 概要如下 1.必须将编码注释放在第一行或者第二行 2.可选格式 解决Python中文乱码问题#-*-coding:utf-8-*- 最新发布 m0_54701273的博客 08-15 1022 使用#-*-coding:utf-8-*-解决python中文乱码问题,以及pycharm中设置作者和时间等文件头信息 python中字符编码:codingutf-8,unicde,defaultencoding,UnicodeDecodeError,UnicodeEncodeError bitcarmanlee的博客 10-23 3万+ 1.前言 虽然用python有一些年头了,但是在处理中文字符串的时候还是经常会遇到UnicodeEncodeError,UnicodeDecodeError等问题。

每次都是随便调一调,程序能正常run以后就不管了。

不巧今天又遇到了同样的状况,于是痛下决心,一定要把python中的字符编码问题搞清楚。

2.字节与字符 计算机存储的任何数据,包括各种文本、图片、音视频文件等等,实际上都是一串二进制数字... 关于Python的编码注释#-*-coding:utf-8-*-详解 xld123 06-01 2万+ 一.普通解释:                                                                                                 ... 论#coding=utf-8的位置 生而为人我很抱歉 11-03 4563 1.必须要在第一行或者第二行。

2.必须要在可执行代码和中文注释的前面。

3.如果页面没有中文,那么它只是一个普通注释,位置任意都行。

对的写法:#coding=utf-8 #为未为 print"test" #coding=utf-8 print"test" #为未为错的写法:v=1 #coding=utf-8 #为未为 print"test"print"test" #coding=utf python2coding=utf8出错 ajiong314 06-13 536 #coding=utf-8 importsys reload(sys) sys.setdefaultencoding('utf8') OK “相关推荐”对你有帮助么? 非常没帮助 没帮助 一般 有帮助 非常有帮助 提交 ©️2022CSDN 皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页 敲代码的quant CSDN认证博客专家 CSDN认证企业博客 码龄5年 暂无认证 170 原创 2533 周排名 842 总排名 209万+ 访问 等级 1万+ 积分 6623 粉丝 1482 获赞 457 评论 7338 收藏 私信 关注 热门文章 RMSE(均方根误差)、MSE(均方误差)、MAE(平均绝对误差)、SD(标准差) 189011 时间序列分析之ADF检验 132023 机器学习里面的GroundTruth是什么意思 113760 pandas之分组groupby()的使用整理与总结 100446 python字符串(str)与列表(list)以及数组(array)之间的转换方法详细整理 99361 分类专栏 optimization 3篇 math 3篇 latex 1篇 ---编程语言以及相关知识--- 1篇 java 4篇 python 32篇 hadoop 6篇 linux 5篇 Git 1篇 datastructuresandalgorithms 5篇 django 1篇 ---人工智能--- 1篇 reinforcementlearning 3篇 outlieranalysis 4篇 ensemblelearning 2篇 machinelearning 34篇 conceptdrift 2篇 ---量化领域--- 1篇 timeseries 16篇 dataanalysis 4篇 quantitativetrading 17篇 probabilityandstatistics 7篇 optionresearch 4篇 vn.py 10篇 ---其他--- 1篇 interview 1篇 personalexperience 11篇 最新评论 【python量化】将Transformer模型用于股票价格预测 YOUL555: 代码无法在公众号获取了,提示被取消了百度网盘的分享,博主能再分享一下吗 【python量化】将DeepAR用于股票价格多步概率预测 zqmzkf: 你好,请问一下代码里面的模型输入是啥?train_data之前也没有定义过呀 【python量化】将Transformer模型用于股票价格预测 明日韭菜: 代码无法在公众号获取了,提示被取消了百度网盘的分享 【python量化】搭建一个CNN-LSTM模型用于股票价格预测 baidu_38833990: 您好,公众号给的连接取消掉了,可以再分享一个嘛,谢谢 解读:基于订单流、技术分析与神经网络的期货短期走势预测模型 ouyangmoshu: 回撤直接给人干麻了 您愿意向朋友推荐“博客详情页”吗? 强烈不推荐 不推荐 一般般 推荐 强烈推荐 提交 最新文章 WWW2022|量化交易相关论文(附论文链接) KDD2022|量化交易相关论文(附论文链接) 【python量化】将DeepAR用于股票价格多步概率预测 2022年13篇 2021年13篇 2020年32篇 2019年69篇 2018年57篇 2017年21篇 目录 目录 分类专栏 optimization 3篇 math 3篇 latex 1篇 ---编程语言以及相关知识--- 1篇 java 4篇 python 32篇 hadoop 6篇 linux 5篇 Git 1篇 datastructuresandalgorithms 5篇 django 1篇 ---人工智能--- 1篇 reinforcementlearning 3篇 outlieranalysis 4篇 ensemblelearning 2篇 machinelearning 34篇 conceptdrift 2篇 ---量化领域--- 1篇 timeseries 16篇 dataanalysis 4篇 quantitativetrading 17篇 probabilityandstatistics 7篇 optionresearch 4篇 vn.py 10篇 ---其他--- 1篇 interview 1篇 personalexperience 11篇 目录 评论 8 被折叠的  条评论 为什么被折叠? 到【灌水乐园】发言 查看更多评论 打赏作者 敲代码的quant 你的鼓励将是我创作的最大动力 ¥2 ¥4 ¥6 ¥10 ¥20 输入1-500的整数 余额支付 (余额:--) 扫码支付 扫码支付:¥2 获取中 扫码支付 您的余额不足,请更换扫码支付或充值 打赏作者 实付元 使用余额支付 点击重新获取 扫码支付 钱包余额 0 抵扣说明: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。

2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值



請為這篇文章評分?