2014-09-04 37 views
1

当执行下列级联:更改自动STR的默认编码到UNICODE转换

a = u'Hello there ' 
b = 'pirate ®' 
c = a + b # This will raise UnicodeDecodeError 

在Python 2,'pirate ®'自动通过ASCII编码转换为unicode类型。由于字符串中存在非ASCII字符序列(®),因此它将失败。

有没有办法改变这种默认编码为utf8?

+0

@KobiK这不是问什么 – wRAR 2014-09-04 05:05:08

+0

只要在任何地方使用unicode字符串,并明确地从外部世界转换字符串。 – wRAR 2014-09-04 05:08:06

+0

没有办法 - 我开始使用只接受'str'类型的模板库,并且我的代码使用'unicode'文字和unicode几乎都是。 – Mansour 2014-09-04 05:10:22

回答

0

从Python的Unicode HOWTO:

理想情况下,你会希望能够写在你的语言的自然编码文字。然后,您可以使用您最喜欢的编辑器编辑Python源代码,该编辑器可以自然显示重音字符,并在运行时使用正确的字符。

Python支持以任何编码编写Unicode文字,但是您必须声明正在使用的编码。这是通过包含特殊注释作为源文件的第一行或第二行来完成的:

#!/usr/bin/env python 
# -*- coding: latin-1 -*- 

u = u'abcdé' 
print ord(u[-1]) 
+1

这不是关于Unicode字面值。如果你有'x + y',其中x是'unicode'类型,''是'str'类型,'y'有一个utf8序列,'x + y'会产生一个异常,因为使用默认的ascii编码。 – Mansour 2014-09-04 05:22:15

+0

好的,我误解了。这样的事情呢? c =''.join([(c.decode('utf-8')if isinstance(c,str)else c)for c in [a,b]]) – pwray 2014-09-04 13:18:32

+0

请参阅[接受的答案](http ://stackoverflow.com/a/25658000/319954)这正是我正在寻找的。 – Mansour 2014-09-04 14:43:32