2017-06-19 61 views
0

我从包含拉丁文字符集latin1_swedish_ci排序规则的MySQL // Maria数据库中选择值。不同的欧洲语言可能会有西班牙语,德语或挪威语。Python 3字符编码问题

我得到

#!/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但我已经declard头。另外decode('utf8').encode('cp1250')没有帮助

+0

感谢您的支持。这返回'UnicodeDecodeError:'utf-8'编解码器无法解码位置0字节0xf1 –

+0

[如何在Python 3中设置sys.stdout编码?](https://stackoverflow.com/questions/4374455/how-to-set-sys-stdout-encoding-in-python-3) –

回答

0

好吧编码问题已经解决了。 Coldspeed给了一个重要的后面与loacle。因此所有的荣誉给他!不幸的是,这并不容易。

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

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

解决方案是从Jack O'Connor。张贴在this answer

1

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

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

似乎与语言环境点指向目标。不幸的是你的方法仍然没有带来正确的解决方案。但随着地区我越来越近。 –

+0

@JoePlatano'row [0] .encode('latin-1')。decode('utf-8')'? –

+0

没有不工作,以及它在shell上执行,如果我执行该脚本为python script.py它的作品。在网络服务器上没有。我在shell中添加了以下几行'print(sys.stdout.encoding)'和'print(sys.getdefaultencoding())',两者都有utf-8。如果我在浏览器上执行脚本,sys.stdout.encoding有ANSI_X3.4-1968,sys.getdefaultencoding()有utf-8。我认为在apache上有一些语言环境问题 –