python将ascii str转换为utf8 str

时间:2014-05-24 07:03:32

标签: python utf-8 ascii

我有这个字符串:

emission = "/home/guillaume/Vid\xc3\xa9os/pluzz/info_midi_102115995.mkv\n"

我想将其转换为:

emission = "/home/guillaume/Vidéos/pluzz/info_midi_102115995.mkv"

这是我的代码:(文本来自我的gtk窗口中的伪术语,使用python-vte)

text = repr(self.v.get_text(lambda *a: True).rstrip())
if "Output #0" in text:
    line = text.split("matroska,",1)[1]    
    splitted = line.split() # to split the line   
    emission = splitted[1]  # to get the str
    emission = emission.replace("'", "")
    emission = emission.replace(":", "")        
    print "1", emission
    print type(emission)    
    emission = emission.decode("utf-8")
    print "2", emission

结果:

1 /home/guillaume/Vid\xc3\xa9os/pluzz/info_midi_102115995.mkv\n
<type 'str'>    
2 /home/guillaume/Vid\xc3\xa9os/pluzz/info_midi_102115995.mkv\n

由于

解决方案:我不得不改变

text = repr(self.v.get_text(lambda *a: True).rstrip())

由:

text = str(self.v.get_text(lambda *a: True).rstrip())

感谢用户2357112!

1 个答案:

答案 0 :(得分:2)

>>> encoded = "/home/guillaume/Vid\xc3\xa9os/pluzz/info_midi_102115995.mkv\n"
>>> decoded = encoded.decode('utf-8')
>>> decoded
u'/home/guillaume/Vid\xe9os/pluzz/info_midi_102115995.mkv\n'
>>> print decoded
/home/guillaume/Vidéos/pluzz/info_midi_102115995.mkv

假设file实际上是一个字节串,看起来真的像你向我们展示的那样,file.decode("utf-8")本来应该工作得很好(除了最后的换行符,你是&#39;}我必须单独strip关闭)。 \xe9输出中的repr出现是因为它打印转义码的模糊性要小于打印任意Unicode怪异(如零宽度空格)或使文本向后移动的内容;解码后的字符串包含您想要的字符。


更新:通过发布的代码和输出,我们可以看到repr调用正在将输入从编码的Unicode转换为文本的UTF-8转义序列,具有实际的反斜杠和十六进制而不是UTF-8字节。将repr来电更改为str可解决问题。完全删除repr可能会做同样的事情。