2017-06-19 59 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上有一些語言環境問題 –