python 遇到 syntaxerror: non-ascii character '/xd6' in file 我 教你解决 (python问题)(转)
遇到标题上的问题,按照我的解决广方案来吧
=====================================
(一) 用记事本创建一个文件ChineseTest.py,默认ANSI: s = "中文" print s
测试一下瞧瞧: E:/Project/Python/Test>python ChineseTest.py
偷偷地把文件编码改成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, but no encoding declared ; 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 遇到 syntaxerror: non-ascii character '/xd6' in file 我 教你解决 (python问题)(转)的更多相关文章
- [Error]syntaxerror: non-ascii character '/xd6' in file
eclipse代码运行时显示:syntaxerror: non-ascii character '/xd6' in file 原因:如果文件里有非ASCII字符,需要在第一行或第二行指定编码声明. 解 ...
- SyntaxError: Non-ASCII character ‘\xe5’ in file 的解决办法
在Python脚本中包含中文的时候,会遇到编码错误.例如: 出现SyntaxError: Non-ASCII character ‘\xe5’ in file 的错误. 解决办法:是因为编码有问题,所 ...
- python 编码问题:'ascii' codec can't encode characters in position 的解决方案
报错: 'ascii' codec can't encode characters in position 8-50: ordinal not in range(128) Python在安装时,默认的 ...
- python 运行时报错误SyntaxError: Non-ASCII character '\xe5' in file 1.py on line 2
File "1.py", line 2SyntaxError: Non-ASCII character '\xe5' in file 1.py on line 2, but no ...
- Python报错:SyntaxError: Non-ASCII character '\xe5' in file
运行Python脚本总是报一下的错误: SyntaxError: Non-ASCII character '\xe5' in file 原因:Python默认是以ASCII作为编码方式的,如果在自己的 ...
- Python报错:SyntaxError: Non-ASCII character '\xe5' in file的解决方法
SyntaxError: Non-ASCII character '\xe5' in file 原因:Python默认是以ASCII作为编码方式的,如果在自己的Python源码中包含了中文(或者其他的 ...
- python SyntaxError: Non-ASCII character '\xd5' in file
我使用的是python2.7, 在pycharm想运行程序,但是却报出了SyntaxError: Non-ASCII character '\xd5' in file 原因是因为源码中包含了中文注释, ...
- python编码错误的解决办法 SyntaxError: Non-ASCII character '\xe5' in file
[提出问题]. 在编写Python时,当使用中文输出或注释时运行脚本,会提示错误信息: SyntaxError: Non-ASCII character '\xe5' in file ******* ...
- Python报错:SyntaxError: Non-ASCII character '\xe5' in file 1.py on line 6, but no encoding declared...
本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=686 具体报错内容: File "1.py", line 6 SyntaxError: Non- ...
随机推荐
- js检测对象的类型
在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. 示例: var array=[1,2,3]; Object. ...
- [转载]C# 中Web.config文件的读取与写入
asp.net2.0新添加了对web.config直接操作的功能.开发的时候有可能用到在web.config里设置配置文件,其实是可以通过程序来设置这些配置节的. asp.net2.0需要添加引用: ...
- 编写你的第一个 Django 程序 第1部分
原地址:http://django-chinese-docs.readthedocs.org/en/latest/intro/tutorial01.html 让我们通过例子来学习. 在本教程中,我们将 ...
- python参考手册--第2章词汇和语法约定
1.续行符\ 三引号.().{}.[]中的内容不需要续行符 2.空格缩进 优选空格作为缩进,不要用tab,这是因为不同操作系统下tab对应的空格不一样,而python是通过严格的空格来控制语句块的. ...
- http://www.cnblogs.com/amboyna/archive/2008/03/08/1096024.html
http://www.cnblogs.com/amboyna/archive/2008/03/08/1096024.html
- cocos2dx addchild坐标问题
a.addchild(b); 会把a->getBoundingBox矩形的左下角坐标点和b的锚点贴合在一起. ----- 其他引擎默认不是这样的,所以再跨平台导数据的时候,要注意这些细微的差别 ...
- C#基础精华03(常用类库StringBuilder,List<T>泛型集合,Dictionary<K , V> 键值对集合,装箱拆箱)
常用类库StringBuilder StringBuilder高效的字符串操作 当大量进行字符串操作的时候,比如,很多次的字符串的拼接操作. String 对象是不可变的. 每次使用 System. ...
- P143、面试题25:二叉树中和为某一值的路径
题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.二叉树结点的定义如下:struct BinaryTreeNode ...
- 区分jquery中的offset和position
一次又一次地碰到需要获取元素位置的问题, 然后一次又一次地查offset和position的区别. 忍不了了, 这次一定得想办法记下来. position是元素相对于父元素的位置. 这个好记, par ...
- R语言学习笔记:矩阵与数组(array)
元素可以保存在多个维度的对象中,数组存储的是多维数据元素,矩阵的是数组的特殊情况,它具有两维. 创建数组的几种方法. 1. > m<-c(45,23,66,77,33,44,56,12,7 ...