Python中关于coding=utf-8以及中文字符前加u的解释 - CSDN博客
文章推薦指數: 80 %
写了很久的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币套餐、付费专栏及课程。
余额充值
延伸文章資訊
- 1Python 程式碼或註解加入中文教學,設定UTF-8 編碼- G. T. Wang
#!/usr/bin/python # -*- coding: utf-8 -*- # 中文註解 print("Hello, world.") Python 指令稿的編碼宣告必須出寫在程式碼的第...
- 2在Python 中解碼UTF-8 | D棧
在Python 中解碼 UTF-8 字串 ... 要解碼以 UTF-8 格式編碼的字串,我們可以使用字串上指定的 decode() 方法。 此方法接受兩個引數, encoding 和 error 。
- 3Python 的Big5 與UTF-8 檔案編碼轉換程式教學 - Office 指南
介紹如何使用簡單的Python 程式處理Big5 與UTF-8 檔案的編碼轉換問題。 Big5 與UTF-8 的編碼轉換是在中文資料處理上常見的問題之一,以下介紹如何使用Python 來 ...
- 4[python]讀取編碼為UTF-8的檔案| twkhjl blog - - 點部落
[python]讀取編碼為UTF-8的檔案. 746; 0. encoding='UTF-8'. fileName="text.txt" file1=open(fileName,"r",enco...
- 5Day27 Python 基礎- 字符轉編碼操作 - iT 邦幫忙
UTF-8 是一種針對Unicode的可變長度字元編碼,英文字符一樣會依照ASCII碼規範,只占一個字節8bit,而中文字符的話,統一就占三個字節. 回顧可以參考字符編碼.