2014-07-15 33 views
1

遗留发现后立即解码:的Python:编码

somevar.encode('utf-8').decode('utf-8') 

我们能找到的时候追赶编码错误这样的结构有用吗?

+0

你不是在这里正常化,所以我换了标签。不,绕过UTF-8不会有任何影响。 –

+0

任何可以在编码中表示的字符串都会愉快地往返。 UTF-8 [可以代表任何Unicode代码点](http://en.wikipedia.org/wiki/UTF-8),这就是为什么它被设计的原因,所以这个代码应该是一个相当昂贵的无操作。 – holdenweb

+0

它确实在Python 2中有所作为,对吧?在此之后,返回的值始终是Unicode,无论“somevar”是否为Python 2的“str”。 –

回答

2

实验在Python 2.7.6解释:

a = u"string" 
a 

输出:u'string '

b = a.encode('utf-8').decode('utf-8') 
b 

输出:u'string'

b = a.decode('utf-8').encode('utf-8') 
b 

输出: '字符串'

a = "string" 
a 

输出: '串'

b = a.encode('utf-8').decode('utf-8') 
b 

输出:u'string”

b = a.decode('utf-8').encode('utf-8') 
b 

输出: '串'

而且,原字符串是否是Unicode与否,输出编码 - >解码将是一个Unicode字符串。 decode - > encode的输出不会是一个unicode字符串。尽管如此,值得注意的是,由于字符串是不可变的,所以除了检查UnicodeErrors之外,因为它没有捕获函数调用的返回值,所以您发布的代码行对于其他任何东西都是无用的。

编码 - >解码结构的唯一真正效果是所有通过它的字符串(并从返回中捕获)都是Unicode字符串。为什么你会想这样做,而不是unicode_string = unicode(normal_string, encoding='UTF-8')我不知道。