gpt4 book ai didi

python - 在 python 3 中使用非 ascii 字符进行编码/解码时出现问题

转载 作者:太空宇宙 更新时间:2023-11-04 04:23:33 24 4
gpt4 key购买 nike

我正在尝试使用 python3 unicode_escape 转义我的字符串中的\n,但挑战是整个字符串中存在非 ascii 字符,如果我使用 utf8 编码然后使用 unicode_escape 解码字节,那么特殊字符会出现乱码。有没有办法让\n 换行转义而不混淆特殊字符?

s = "hello\\nworld└--"
print(s.encode('utf8').decode('unicode_escape'))

Expected Result:
hello
world└--

Actual Result:
hello
worldâ--

最佳答案

正如用户 wowcha 所观察到的,unicode-escape 编解码器采用 latin-1 编码,但您的字符串包含一个不可编码为 latin- 的字符1

>>> s = "hello\\nworld└--"
>>> s.encode('latin-1')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'latin-1' codec can't encode character '\u2514' in position 12: ordinal not in range(256)

将字符串编码为 utf-8 可以解决编码问题,但会导致 mojibakeunicode-escape

解码时

解决方案是使用 backslashreplace编码时的错误处理程序。这会将问题字符转换为可以编码为 latin-1 的转义序列,并且在从 unicode-escape 解码时不会被破坏。

>>> s.encode('latin-1', errors='backslashreplace')
b'hello\\nworld\\u2514--'

>>> s.encode('latin-1', errors='backslashreplace').decode('unicode-escape')
'hello\nworld└--'

>>> print(s.encode('latin-1', errors='backslashreplace').decode('unicode-escape'))
hello
world└--

关于python - 在 python 3 中使用非 ascii 字符进行编码/解码时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53955397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com