我想读取包含表情符号和非ASCII字符的文本文件行,最后将它们打印出来。问题在于,我要么可以正确打印表情符号,要么可以打印非ASCII字符(例如u)
文本文件中的行(UTF-8格式):
I am tired. - Ich bin müde \U0001F4A4
代码如下:
with open(path_txt,"r", encoding="unicode_escape") as file:
content = file.readlines()
print(content[0])
'unicodeescape' codec can't decode bytes in position 0-1: truncated \UXXXXXXXX escape
我还尝试了编码=“raw\u unicode\u escape”。 作为初学者,我不理解整个unicode主题。感谢您的帮助/解决方法
类似/相同的问题(2014年4月):https://bugs.python.org/issue21331
内容似乎混合了转义符(用于表情符号)和UTF-8编码字符(用于“ü”)
从您的帖子中还不完全清楚,但我假设如果您以二进制模式(
open(path, 'rb')
)读取文件并打印第一行,您会看到:这意味着“ü”是用UTF-8编码的,但表情符号被转义了。 注意:您也看到了“ü”的转义序列,但这只是表示。 试试}实际上是一个长度为10的逃逸序列
len(b'\xc3')
,你会发现这实际上是一个长度为1字节的字符串^另一方面,{现在,“unicode转义”序列并不期望完全是这种格式。 它将未转义的非ASCII字符解释为拉丁语-1–这就是为什么在使用此编解码器时会看到乱码字符而不是“u”:
但是如果“unicode escape”想要拉丁语-1,我们可以给它! 首先,我们使用UTF-8解码以获得正确的“ü”:
这不涉及表情符号转义,因为它都是ASCII码。 ASCII范围内的字符对拉丁语-1和UTF-8(和ASCII)的编码相同
现在我们用拉丁语1编码:
这是“unicode转义”编解码器所理解的:
在您的设置中,您可以将第一个
decode
步骤推迟到open()
的内部处理:相关问题 更多 >
编程相关推荐