1. 程式人生 > >err ‘ascii’ codec can’t encode character u’\u7684′ in position 7: ordinal not in range(128)

err ‘ascii’ codec can’t encode character u’\u7684′ in position 7: ordinal not in range(128)

又遇到 python 2.x 的編碼問題,一樣的程式碼在 Mac OS 上可以執行沒問題,放到 Linux上就出錯。但我又不想使 Dirty Hack 的方式去 reload sys.

下面這段 code:

import sys; 
print(sys.getdefaultencoding())
print(sys.stdout.encoding)

在 Mac OS 上執行結果:

ascii
UTF-8

在 Linux 上執行結果:

ascii
ANSI_X3.4-1968

在 Linux 上執行截圖:

我的完整  source code:

#!/usr/bin/env python
#encoding=utf-8

import sys; 
print(sys.getdefaultencoding())
print(sys.stdout.encoding)

import json

data='{"title": "Max Yao\u7684Dropboxlike"}'
json_obj = None
try :
    json_obj = json.loads(data)
    print json_obj['title']
except Exception as err:
    print "err", err
    json_obj = None

應急解法:

in the “/etc/environment” file,add line:

PYTHONIOENCODING=utf8

但這段加了,其實沒什麼作用,主要的解法,還是在字串都要記得加  u“xxxx”, 全部改用 unicode, 避免混合使用 str 和  unicode.

下一個 Error:

mysql Error: ‘latin-1’ codec can’t encode character u

I ran into this same issue when using the Python MySQLdb module. Since MySQL will let you store just about any binary data you want in a text field regardless of character set, I found my solution here:

Using UTF8 with Python MySQLdb

Edit: Quote from the above URL to satisfy the request in the first comment…

“UnicodeEncodeError:’latin-1′ codec can’t encode character …”

This is because MySQLdb normally tries to encode everythin to latin-1. This can be fixed by executing the following commands right after you’ve etablished the connection:
db.set_character_set(‘utf8’)
dbc.execute(‘SET NAMES utf8;’)
dbc.execute(‘SET CHARACTER SET utf8;’)
dbc.execute(‘SET character_set_connection=utf8;’)
“db” is the result of MySQLdb.connect(), and “dbc” is the result of db.cursor().

相關文章: