Python 将 ASCII 字符串转换为 UTF-8 字符串

1 投票
1 回答
1458 浏览
提问于 2025-04-18 07:27

我有一个字符串:

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 个回答

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") 应该是可以正常工作的(除了最后的换行符,你需要单独用 strip 去掉)。在 repr 输出中出现的 \xe9 是因为打印转义字符比打印一些奇怪的 Unicode 字符(比如零宽空格或让文本反向显示的字符)要清晰得多;解码后的字符串里包含了你想要的字符。


更新: 根据发布的代码和输出,我们可以看到 repr 调用把输入从编码的 Unicode 转换成了文本的 UTF-8 转义序列,使用了实际的反斜杠和十六进制,而不是 UTF-8 字节。把 repr 改成 str 解决了这个问题。完全去掉 repr 也可能会有同样的效果。

撰写回答