遇到标题上的问题,按照我的解决广方案来吧

=====================================

(一) 用记事本创建一个文件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, but no encoding declared ; 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, 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中的print原理: 简单地说,python中的print直接把字符串传递给操作系统,所以你需要把str解码成与操作系统一致的格式。Windows使用CP936(几乎与gbk相同),所以这里可以使用gbk。 最后测试: # coding=utf-8 s = "中文" print unicode(s, "cp936") 结果:中文

python 遇到 syntaxerror: non-ascii character '/xd6' in file 我 教你解决 (python问题)(转)的更多相关文章

  1. [Error]syntaxerror: non-ascii character '/xd6' in file

    eclipse代码运行时显示:syntaxerror: non-ascii character '/xd6' in file 原因:如果文件里有非ASCII字符,需要在第一行或第二行指定编码声明. 解 ...

  2. SyntaxError: Non-ASCII character ‘\xe5’ in file 的解决办法

    在Python脚本中包含中文的时候,会遇到编码错误.例如: 出现SyntaxError: Non-ASCII character ‘\xe5’ in file 的错误. 解决办法:是因为编码有问题,所 ...

  3. 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在安装时,默认的 ...

  4. 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 ...

  5. Python报错:SyntaxError: Non-ASCII character '\xe5' in file

    运行Python脚本总是报一下的错误: SyntaxError: Non-ASCII character '\xe5' in file 原因:Python默认是以ASCII作为编码方式的,如果在自己的 ...

  6. Python报错:SyntaxError: Non-ASCII character '\xe5' in file的解决方法

    SyntaxError: Non-ASCII character '\xe5' in file 原因:Python默认是以ASCII作为编码方式的,如果在自己的Python源码中包含了中文(或者其他的 ...

  7. python SyntaxError: Non-ASCII character '\xd5' in file

    我使用的是python2.7, 在pycharm想运行程序,但是却报出了SyntaxError: Non-ASCII character '\xd5' in file 原因是因为源码中包含了中文注释, ...

  8. python编码错误的解决办法 SyntaxError: Non-ASCII character '\xe5' in file

    [提出问题]. 在编写Python时,当使用中文输出或注释时运行脚本,会提示错误信息: SyntaxError: Non-ASCII character '\xe5' in file ******* ...

  9. 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- ...

随机推荐

  1. json2.js使用参考

    json2.js的源码地址: https://github.com/douglascrockford/JSON-js Visual Studio用户可以直接通过Nuget来获得. json2.js提供 ...

  2. IOS开发之表视图(UITableView)

    IOS开发之表视图(UITableView)的基本介绍(一) (一):UITableView的基本概念 1.在IOS开发中,表视图的应用十分广泛和普及.因此掌握表视图的用法显得非常重要.一般情况下对于 ...

  3. Java 向Hbase表插入数据异常org.apache.hadoop.hbase.client.HTablePool$PooledHTable cannot be cast to org.apache.client.HTable

    出错代码如下: //1.create HTablePool HTablePool hp=new HTablePool(con, 1000); //2.get HTable from HTablepoo ...

  4. iOS开发之loadView、viewDidLoad及viewDidUnload的关系

    iOS开发之loadView.viewDidLoad及viewDidUnload的关系 iOS开发之loadView.viewDidLoad及viewDidUnload的关系    标题中所说的3个方 ...

  5. 李洪强iOS开发之XMPP

      XMPP历史 这个xmpp框架在2008年开始,不过是一个简单地RFC实现.提供一个最小的代理去接受三种xmpp的基本类型presence.message.iq.因为framwork只提供了最小的 ...

  6. [itint5]单词游戏

    http://www.itint5.com/oj/#36 此题在数据大些,而且全是A的情况下会超时(因为要匹配到很后面才false).通过利用数组本身作为visited标示,而且使用string引用, ...

  7. HeadFirst设计模式之迭代器模式

    一. 1.迭代器模式是对遍历集合元素的抽象 2.The Iterator Pattern provides a way to access the elements of an aggregate o ...

  8. 安装 ArcGIS Runtime SDK for Android

    ArcGIS for Android 开发:Android 平台搭建 - liyong20080101的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/liyong ...

  9. ScrollView can host only one direct child 解决

    主要是ScrollView内部只能有一个子元素,即不能并列两个子元素,所以需要把所有的子元素放到一个LinearLayout内部或RelativeLayout等其他布局方式让后再在这个layout外部 ...

  10. android的休眠和唤醒流程

    android休眠唤醒流程: power按键事件上报给android系统,最终由windownmanager接收到,当有按键事件时判断是否需要休眠后唤醒系统,然后调用powermanager系统服务去 ...