![](/img/trans.png)
[英]How can I get python ''.encode('unicode_escape') to return escape codes for ascii?
[英]Python3: print text with emojis read from text-file with non ASCII-characters (unicode_escape)
我想读取包含表情符号和非 ASCII 字符的文本文件行,最后将它们打印出来。 问题是我要么可以正确打印表情符号字形,要么可以打印非 ASCII 字符(例如 ü)。
文本文件中的行(UTF-8 格式):
我累了。 - Ich bin müde \U0001F4A4
阅读代码:
with open(path_txt,"r", encoding="unicode_escape") as file:
content = file.readlines()
print(content[0])
'unicodeescape' 编解码器无法解码 position 0-1 中的字节:截断 \UXXXXXXXXXX 转义
我还尝试了 encoding="raw_unicode_escape"。 作为初学者,我不了解整个 unicode 主题。 感谢您的帮助/解决方法!!
类似/相同的问题(04/2014): https://bugs.python.org/issue21331
似乎内容混合了转义符(对于表情符号)和 UTF-8 编码字符(对于“ü”)。
从您的帖子中并不完全清楚,但我假设如果您以二进制模式( open(path, 'rb')
)读取文件并打印第一行,您会看到:
b'm\xc3\xbcde \\U0001f4a4'
这意味着“ü”是用 UTF-8 编码的,但是表情符号被转义了。 注意:您也会看到“ü”的转义序列,但这只是表示形式。 试试len(b'\xc3')
你会发现这实际上是一个长度为 1 字节的字符串。 另一方面, b'\\U0001f4a4'
实际上是长度为 10 的转义序列。
现在“unicode-escape”序列并不期望这种格式。 它将未转义的非 ASCII 字符解释为 Latin-1 - 这就是为什么在使用此编解码器时您会看到乱码字符而不是“ü”:
>>> b'm\xc3\xbcde \\U0001f4a4'.decode('unicode-escape')
'müde 💤'
但是如果“unicode-escape”想要 Latin-1,我们可以给它,首先:我们用 UTF-8 解码得到正确的“ü”:
>>> b'm\xc3\xbcde \\U0001f4a4'.decode('utf8')
'müde \\U0001f4a4'
这不会触及表情符号转义,因为它都是 ASCII。 对于 Latin-1 和 UTF-8(和 ASCII),ASCII 范围内的字符编码相同。
现在我们用 Latin-1 编码:
>>> b'm\xc3\xbcde \\U0001f4a4'.decode('utf8').encode('latin1')
b'm\xfcde \\U0001f4a4'
这是“unicode-escape”编解码器理解的东西:
>>> b'm\xc3\xbcde \\U0001f4a4'.decode('utf8').encode('latin1').decode('unicode-escape')
'müde 💤'
在您的设置中,您可以将第一个decode
步骤推迟到open()
的内部处理:
with open(path_txt, "r", encoding="utf-8") as file:
for line in file:
line = line.encode('latin1').decode('unicode-escape')
# do something with line
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.