Python符号化エラー:UnicodeEncodeError:'ascii'codec can't encodeのまとめ

2210 ワード

Pythonがテキストデータを処理するときによく現れるのは符号化エラーです.煩わしいですが、符号化エラー時のエラーメッセージは以下の通りです.
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)

処理の仕方は次のようになります.
1、ファイルのヘッダに次の2行のコードを付けて、コード間を改行しないでください.
#!/usr/bin/env python
#coding=utf-8

2、引用するときに声明を付ける
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

3、codecsメソッドを使用してファイルが開いていることを宣言するタイプがファイルに書き込まれているか開いている場合:
import codecs
fw = codecs.open('test1.txt','a','utf-8')
fw.write(line2)
 
#       
test_docs = [x.strip().split() for x in codecs.open(test_docs, "r", "utf-8").readlines()]

 
4、途方に暮れて、試してみるという態度で、トランスコード
中国語の部分をトランスコードします.この前提は、テキスト自体の符号化フォーマットを知ることです.一般的にWindows上のファイルのデフォルトが「gbk」である場合、上の1、2ステップで「utf-8」解析をインストールするとエラーが報告されるため、decodeで「gbk」を「Unicode」に復号し、encodeで「Unicode」を「utf-8」に変換すると、ファイルが認識され、以下のようになります.
query = '    ' 
query.decode('gbk').encode('utf-8') 

難点はテキスト以前の符号化フォーマットを知ることです.
5,str()関数は使わなくてもいいです.
元の関数は以下のように、出力したいだけですが、符号化のエラーを報告します.
def parse_output(row):
    search_id = row[0]
    contentid_or_query = row[1]
    click_num = row[2]
    strm = str(search_id)+"\t"+str(contentid_or_query)+"\t"+str(click_num)
    return strm

なぜならcontentid_or_query自体は中国語の文字ですが、str()関数を使うと実はそれをトランスコードしていて、str()関数が何に変換されているのか分かりません.だからやってみる態度でstr()関数を消して、どうしたと思いますか.それから間違いを報告しません.
def parse_output(row):
    search_id = row[0]
    contentid_or_query = row[1]
    click_num = row[2]
    #try:
    strm = str(search_id)+"\t"+contentid_or_query+"\t"+str(click_num)
    #except UnicodeEncodeError as e:
    #return ""
    return strm

時にはstringタイプになっていることもありますが、strを使うと間違って報告されます.これはstringタイプではないと判断してstrで回転したほうがいいです.
    new_row = []
    for line in row:
        if isinstance(line,int):
            line = str(line)
    new_row.append(line)
    #new_row = [str(line) for line in row]
    strm = "\t".join(new_row)
    return strm