【发布时间】:2021-07-08 04:30:08
【问题描述】:
我对字符串的编码有一个奇怪的问题。我有一个未知编码的字符串,并通过type(string) 检查它确实是一个字符串而不是字节。
当我执行print(string) 时,我的程序会返回类似'\xc3\xa4\xc3\xbc\xc3\xb6\xc3\x84\xc3\x9c\xc3\x96\xc3\x9f' 的内容,它们是utf-8 编码的德语变音符号äüöÄÜÖß。
现在在 python 控制台中,我可以执行以下操作:
$ python
Python 3.6.8 (default, Aug 13 2020, 07:46:32)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('\xc3\xa4\xc3\xbc\xc3\xb6\xc3\x84\xc3\x9c\xc3\x96\xc3\x9f'.encode('latin').decode('utf-8'))
äüöÄÜÖß
>>>
但是,这在我使用相同虚拟环境的程序中似乎不起作用。
print('\xc3\xa4') 和 print('\xc3\xa4'.encode('latin').decode('utf-8')) 返回相同。
欢迎提出意见
Kontext: 我的程序从 Kafka 代理读取消息,进行一些转换并写入 MySQL。错误编码的字符串在那里结束。
【问题讨论】:
-
定义:“这似乎不起作用”。
-
了解您的程序中有哪些内容会很有帮助。请也添加。 @Rudertier
-
@snakecharmerb 在我的 venv 内外我都得到了
echo $LANG ',' $LC_CTYPE ',' $LANG->en_US.UTF-8 , , en_US.UTF-8 -
用
b为您的二进制字符串添加前缀。 (不会解决问题,但请不要将二进制数据与unicode字符串混合。如果要编写特定的unicode字符,请使用\uXXXX。 -
@GiacomoCatenazzi 我从一个返回字符串而不是字节字符串的函数中读取字符串。因此,我不能只是前缀它。这就是我尝试编码和解码的原因。
标签: python python-3.x string encoding