1
skydiver 2014-05-13 10:59:24 +08:00
报错是因为中文没法用ascii解码
所以必须指定是unicode,或者用python3吧 |
2
duzhe0 2014-05-13 11:14:16 +08:00
源代码用utf-8编码,并且在文件第二行加上:
# -*- coding: utf-8 -*- |
3
duzhe0 2014-05-13 11:16:59 +08:00
不好意思, 我发的解决不了问题
|
4
loading 2014-05-13 11:22:28 +08:00 via Android
先检测出编码,再连接!
|
5
yxjxx 2014-05-13 11:27:35 +08:00
遇到过类似问题,写过一篇简单的总结. http://yxjxx.me/basic-character-encoding 适用于python2
|
6
Ever 2014-05-13 11:31:44 +08:00
省u加from __future__ import unicode_literals
不然除了英文数字符号统统加u |
7
aurorawu 2014-05-13 11:42:02 +08:00
In [43]: '%s-%s' % ('中国', u'2323')
'' + u'' == u'' 这里是中文(字节)转成unicode(字符) 所以decode 但是中文用ascii解码会报错 @skydiver +1 |
8
Sylv 2014-05-13 11:49:45 +08:00 5
第一个报错是因为有一个参数 u'2323' 是 Unicode,所以在格式化字符串的时候会将所有 String 都转换为 Unicode 输出,而 Python2 默认编码是 ascii,用 ascii 编码转换 String 类型的 '中国' 时就出错了,需要用 utf-8 编码才不会出问题:'中国'.decode('utf-8')。
第二个没问题是因为 u'中国'已经是 Unicode 了就不用转换了,而 '2323' 是可以用默认的 ascii 编码转换成 Unicode 的,所以不会出错。 第三个是因为所有参数都是 String 类型的,那么格式化后输出的也是 String 类型,没有涉及到编码转换,所以没有问题。 曾经也被 Python2 的编码坑了很多次,我后来的经验是:代码里所有写的字符串不管中英文都在前面加u,处理为 Unicode;然后所有输入都 decode 为 Unicode,内部处理全用 Unicode,输出时再 encode 为 String。这样可以尽量避免编码出错,以后也更好迁移到 Python3。 |