【问题标题】:Python3 problem with encoding german umlaute编码德语变音符号的Python3问题
【发布时间】: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


【解决方案1】:

我发现了错误。在上面的代码中,我对字符串进行了显式强制转换。我的字节字符串被​​转换为字符串,从而转义了所有 Unicode 字符。将其更改为正确解码后,一切正常。

【讨论】:

    猜你喜欢
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    相关资源
    最近更新 更多