Python3错误的字符串编码

时间:2018-03-30 22:46:28

标签: python python-3.x flask character-encoding

我有一个可以通过SAML2登录的应用程序。我正在使用apache mellon模块并获取数据:

name = request.environ['MELLON_name']
email = request.environ['MELLON_mail']

根据这些数据,我使用flask_jwt_simpe库创建JWT。然后我想调用get_jwt_identity(),但响应中的名称编码错误,它看起来JiÅí Manes而不是Jiří Manes(捷克语)。我怎么解决这个问题?

编辑#1 locale命令输出

LANG=en_US.utf8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=en_US.utf8

编辑#2:按照python代码在我的VPS上解决了这个问题:

name = bytearray(request.environ['MELLON_name'], 'iso-8859-1').decode('utf-8')

但我希望有另一个通用解决方案: - /

1 个答案:

答案 0 :(得分:1)

您已点击WSGI encoding dance。不幸的是,没有比你已经发现的解决方案更好的解决方案。

正如您所看到的,您已经在使用same作为werkzeug(Flask使用的WSGI包)来解决此问题。

如果您愿意,可以使用该软件包中的兼容性功能,但您可能会发现它们在没有通知的情况下更改为私有模块,因此您可能最好坚持使用自己的等效代码。