Python 3 字符编码问题

Python 3 character encoding issue

我正在从 MySQL // Maria DB 中选择值,其中包含带 latin1_swedish_ci 排序规则的 latin1 字符集。可能有来自不同欧洲语言的字符,如西班牙语 ñ、德语 ä 或挪威语 ø。

我通过

获取数据
#!/usr/bin/env python3
# coding: utf-8

...
sql.execute("SELECT name FROM myTab")
for row in sql
 print(row[0])

出现错误信息: UnicodeEncodeError: 'ascii' 编解码器无法编码字符 '\xf1' 好的,我已将打印更改为

print(str(row[0].encode('utf8')))

结果如下所示: b'\xc3\xb1' 我看了这个 Working with utf-8 encoding in Python source 但我已经声明了 header。 decode('utf8').encode('cp1250') 也无济于事

Python3 尝试根据您的区域设置自动解码此字符串。如果您的语言环境与字符串的编码不匹配,您会得到乱码文本,或者根本不起作用。您可以强制尝试使用您的语言环境对其进行编码,然后解码为 cp1252(这似乎是字符串上的编码)。

print(row[0].encode('latin-1').decode('cp1252'))

好的编码问题终于解决了。 Coldspeed 用 loacle 给了一个重要的 hind。因此,所有的荣誉都给他!不幸的是,这并不容易。

我找到了解决问题的解决方法。

import sys
sys.stdout = open(sys.stdout.fileno(), mode='w', encoding='utf8', buffering=1)

解决方案来自Jack O'Connor. posted in this answer: