本篇推文共计800个字,阅读时间约1分钟。
Python2.x版本
字符编码有时让人很头疼
遇到问题,网上方法可以解决错误。
但对原理还是一知半解
例如
用 Python 输出 "Hello, World!"
#!/usr/bin/python
print "Hello, World!";
英文没有问题
Hello, World!
但是如果你输出中文字符
"你好,世界"
#!/usr/bin/python
print "你好,世界!";
就有可能会碰到中文编码问题
File "hello.py", line 2
SyntaxError: Non-ASCII character '\xe4' in file test.py on line 2, but no encoding
declared; see http://www.python.org/peps/pep-0263.html for details
提醒报错,无法输出中文。
产生这样结果的原因是Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。
解决的方法很简单只需要在文件的开头加入
# -*- coding: UTF-8 -*-
或者
#coding=utf-8
(注意:#coding=utf-8 的 = 号两边不要空格。)
在文件的开头加入上述的代码之后再次尝试输出
“你好,世界!”
#!/usr/bin/python
# -*- coding: UTF-8 -*-
print "你好,世界";
输出的结果就会变成如下所示的样子
你好,世界!
所以如果大家在学习过程中
代码中包含中文,就需要在头部指定编码
注意:Python3.X 源码文件默认使用utf-8编码,所以可以正常解析中文,无需指定 UTF-8 编码。
说到这里需要给各位读者科普一下
在python 2或者3 ,字符串编码只有两类
(1)通用的Unicode编码
(2)将Unicode转化为某种类型的编码
如UTF-8,GBK
计算机只处理数字,因此处理文本时,必须转换成数字才行。
8位(bit)=1字节(byte)=256种不同状态=从000000到111111
1GB=1024M=1024(1024kb)
=1024(1024(1024b))
ASCII编码 是对应英文字符与二进制数字之间的关系;ASCII一共规定了128种,如大写字母A是65,即01000001;可见一字母一字节;
GB2312编码 简体中文常见的编码,两个字节代表一个中文汉字 ,理论上256*256个编码,即可表示65536种中文字;
各国编码不同,为了各国能扩平台进行文本的转换与处理,Unicode就被作为统一码或者单一码。
Unicode编码通常是两个字节,unicode与ASCII编码的区别,在于unicode在ASCII编码前加了一个0,即字母A的ASCII编码为01000001,unicode编码即为0000000001000001;但英文字母其实只用一个字节就够了,unicode编码写英文时多了一个字节,浪费存储空间。
因而unicode开发了通用转换格式
(Unicode Transformation Format(UTF))
常见的有utf-8或者utf-16;
以上就是本期全部内容
往期回顾
愿看完本文的你
实现所有的新年愿望
心想事成
(本公众号已开通留言功能,欢迎各位读者留言)
☆ END ☆
图片|网络
编辑|一个码农
你与世界
只差一个
公众号
喜欢本推文的话麻烦你点个“在看”或“转载”