我有这个字符串:
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!
答案 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
可能会做同样的事情。