遇到标题上的问题,按照我的解决广方案来吧
=====================================
(一)
用记事本创建一个文件ChineseTest.py,默认ANSI:
s = "中文"
print s
测试一下瞧瞧:
E:/Project/Python/Test>python ChineseTest.py
File "ChineseTest.py", line 1
SyntaxError: Non-ASCII character '/xd6' in file ChineseTest.py on line 1, butnoencodingdeclared; see http://www.python.org/peps/pep-0263.html for details
偷偷地把文件编码改成UTF-8:
E:/Project/Python/Test>python ChineseTest.py
File "ChineseTest.py", line 1
SyntaxError: Non-ASCII character '/xe4' in file ChineseTest.py on line 1, butnoencodingdeclared; see http://www.pytho
n.org/peps/pep-0263.html for details
无济于事。。。
既然它提供了网址,那就看看吧。简单地浏览一下,终于知道如果文件里有非ASCII字符,需要在第一行或第二行指定编码声明。把ChineseTest.py文件的编码重新改为ANSI,并加上编码声明:
# coding=gbk
s = "中文"
print s
再试一下:
E:/Project/Python/Test>python ChineseTest.py
中文
正常咯:)
(二)
看一看它的长度:
# coding=gbk
s = "中文"
print len(s)
结果:4。
s这里是str类型,所以计算的时候一个中文相当于两个英文字符,因此长度为4。
我们这样写:
# coding=gbk
s = "中文"
s1 = u"中文"
s2 = unicode(s, "gbk") #省略参数将用python默认的ASCII来解码
s3 = s.decode("gbk") #把str转换成unicode是decode,unicode函数作用与之相同
print len(s1)
print len(s2)
print len(s3)
结果:
2
2
2
(三)
接着来看看文件的处理:
建立一个文件test.txt,文件格式用ANSI,内容为:
abc中文
用python来读取
# coding=gbk
print open("Test.txt").read()
结果:abc中文
把文件格式改成UTF-8:
结果:abc涓枃
显然,这里需要解码:
# coding=gbk
import codecs
print open("Test.txt").read().decode("utf-8")
结果:abc中文
上面的test.txt我是用Editplus来编辑的,但当我用Windows自带的记事本编辑并存成UTF-8格式时,
运行时报错:
Traceback (most recent call last):
File "ChineseTest.py", line 3, in <module>
print open("Test.txt").read().decode("utf-8")
UnicodeEncodeError: 'gbk' codec can't encode character u'/ufeff' in position 0: illegal multibyte sequence
原来,某些软件,如notepad,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。
因此我们在读取时需要自己去掉这些字符,python中的codecs module定义了这个常量:
# coding=gbk
import codecs
data = open("Test.txt").read()
if data[:3] == codecs.BOM_UTF8:
data = data[3:]
print data.decode("utf-8")
结果:abc中文
(四)一点遗留问题
在第二部分中,我们用unicode函数和decode方法把str转换成unicode。为什么这两个函数的参数用"gbk"呢?
第一反应是我们的编码声明里用了gbk(# coding=gbk),但真是这样?
修改一下源文件:
# coding=utf-8
s = "中文"
print unicode(s, "utf-8")
运行,报错:
Traceback (most recent call last):
File "ChineseTest.py", line 3, in <module>
s = unicode(s, "utf-8")
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1: invalid data
显然,如果前面正常是因为两边都使用了gbk,那么这里我保持了两边utf-8一致,也应该正常,不至于报错。
更进一步的例子,如果我们这里转换仍然用gbk:
# coding=utf-8
s = "中文"
print unicode(s, "gbk")
结果:中文
python中的print原理:
简单地说,python中的print直接把字符串传递给操作系统,所以你需要把str解码成与操作系统一致的格式。Windows使用CP936(几乎与gbk相同),所以这里可以使用gbk。
最后测试:
# coding=utf-8
s = "中文"
print unicode(s, "cp936")
结果:中文
分享到:
相关推荐
SyntaxError: Non-ASCII character ‘\xe4’ in file ./common.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details 错误提示中给出了问题解决的连接,所以就点...
主要介绍了python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法的相关资料,需要的朋友可以参考下
如何用 Python 输出 “Hello, World!”,英文没有问题,但是如果你输出中文...SyntaxError: Non-ASCII character '\xe4' in file test.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-
SyntaxError: Non-UTF-8 code starting with '\xd6' in file Z:/Python/xxx/first.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details 原因:Python中默认的编码...
ERROR in ./node_modules/vue-pdf/node_modules/pdfjs-dist/es5/build/pdf.worker.js (./node_modules/vue-pdf/node_modules/worker-loader/dist/cjs.js!./node_modules/vue-pdf/node_modules/pdfjs-dist/es5/build/...
SyntaxError: Non-ASCII character '\xe4' in file getoptTest.py on line 14, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details 如果文件里有非ASCII字符,需要在第
unity 打包web包报错:Uncaught SyntaxError: Unexpected token '在打包文件添加此配置文件。 <?xml version="1.0" encoding="UTF-8"?> <remove fileExtension=".png" /> <mimeMap fileExtension=".memgz" ...
简介 本项目展示使用搭建基于AI算法的视频, 图像, 文本等非结构化数据...python app.py 然后就可以使用chrome浏览器打开 localhost:<demo> 来访问demo服务. 有问题可以加入AnalyticDB的向量团队钉钉沟通群。 License
Syntax Error: Couldn't find 'UniGB-UTF16-H' CMap file for 'Adobe-GB1' collection Syntax Error: Unknown CMap 'UniGB-UTF16-H' for character collection 'Adobe-GB1' Syntax Error: Failed to parse font ...
- Display to screen or store hash and filename in a xml file. - Can recursively browse a directory ( ex fciv.exe c:\ -r ). - Exception list to specify files or directories that should not be computed....
Return需要放在函数里面 报错情况: 报错代码: #coding=utf-8 def find_friend(type, height, sex): :param type: 0示周杰伦 1表示彭于晏 2表示霍建华 :param height: 他的身高是多少 :param sex: 性别 ...
python——pip install xxx报错SyntaxError: invalid syntax 在安装好python后,进入python运行环境后,因为我要用pip安装开发Web App需要的第三方库,执行pip install aiohttp,发现会报错SyntaxError: invalid ...
解决Sublime TEXT 3 安装 Markdown Editing 插件 出现错误 "Error loading syntax file "Packages/Markdown/Markdown.sublime-syntax":Unable to read Packages/Markdown/Markdown.sublime-syntax
Python 中文编码 前面章节中我们已经学会了如何用 Python 输出 “Hello, World!”,英文没有问题,但是...SyntaxError: Non-ASCII character 'xe4' in file test.py on line 2, but no encoding declared; see http:/
先来看看python的版本: >>> import sys >>> sys.version '2.5.1 (r251:54863, Apr... E:\Project\Python\Test>python ChineseTest.py File “ChineseTest.py”, line 1 SyntaxError: Non-ASCII character '\xd6' in fi
xml/ns/javaee":deferred-syntax-allowed-as-literal, "http://java.sun.com/xml/ns/javaee":trim-directive-whitespaces, "http://java.sun.com/xml/ns/javaee":default-content-type, ...
SyntaxError: Non-ASCII character ‘\xe8’ in file Python注释.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details 解决方法如下: 在代码的最顶部添加 #coding=...
在代码文件中定义中文时,经常会遇到问题,要么编码错误,要么是无法正常打印显示。 例如,dict_chinese.py: ...SyntaxError: Non-ASCII character '\xe4' in file dict_chinese.py on line 5, but no