2012-02-05 23 views
1

ユニコード(データベース内)に格納されたデータを取得し、別の形式に変換する必要があります。Pythonを使用してsqlite dbからunicodeを読み取る

次のスニペット

def convert(content): 
    content = content.replace("ஜௌ", "n\[s"); 
    return content; 

mydatabase = "database.db" 
connection = sqlite3.connect(mydatabase) 
cursor = connection.cursor() 
query = ''' select unicode_data from table1''' 
cursor.execute(query) 
for row in cursor.fetchone(): 
    print convert(row) 

は、変換メソッドで次のエラーメッセージをもたらします。データベースの内容がある場合

exceptions.UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0: ordinal not in range(128)

"ஜௌஜௌஜௌ"、出力はでなければなりません "のn \ [SN \ [SNの\ [S"

ドキュメントが使用することを示唆しては無視するかを避けるために交換してくださいユニコード文字列を作成するときのエラー。

for row in cursor.fetchone(): 
    print convert(unicode(row, errors='replace')) 

それは行が既にUnicode文字であることを通知

exceptions.TypeError: decoding Unicode is not supported

を返す以下のように反復が変更さ

これを有効にするための光は高く評価されます。前もって感謝します。

+0

のpythonのバージョン使っていますか? – fuzzyanalysis

+0

Python 2.6.3。 – Gopal

+1

あなたのPythonスクリプトにあなたのユニコード文字列の ''例 ""を入れてみてください。刺激的ですが、Python 2には2種類の文字列、 'unicode'と' str'があります。技術的な側面については不明ですが、これはたとえば8ビット(UTF-8を使用してエンコードされたもの)や16ビットの文字列などです。さらに、 '\\ ['? –

答えて

2
content = content.replace("ஜௌ", "n\[s"); 

あなたは意味提案:

content = content.replace(u'ஜௌ', ur'n\[s'); 

したり、ファイルのエンコーディングが不明である安全のために:

content = content.replace(u'\u0B9C\u0BCC', ur'n\[s'); 

あなたが持っているコンテンツがすでにユニコードなので、あなたがUnicodeを行う必要がありますそれに対する文字列の置換。 uのない"ஜௌ"は、ソースファイルの文字セットに依存するエンコーディングの文字を表すバイト列です。 (バイト文字列はASCII文字のためである、唯一の最も明確な例では、Unicode文字列と一緒にスムーズに動作します。)

r -stringが裸のバックスラッシュを含む心配することはないことを意味します。)

+0

ありがとうbobince、それは魅力のように働いた。 – Gopal

関連する問題