スポンサーサイト

-------- --:--:-- --

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【Python】文字コードまわり

2011-09-02 00:46:08 Fri

慣れたつもりでいたけれど、やっぱり慣れていないPythonでの文字コードの扱い。
よくエラーになる。

それはおいといて。

自分が使うstring-unicode、string-stringのメソッドをメモメモ。



def conv_decoding(data):
"""
stringをunicodeへ変換する
@param ``data'' str object.
@return unicode object.
@return encoding.
"""
lookup = ('utf_8', 'euc_jp', 'euc_jis_2004', 'euc_jisx0213',
'shift_jis', 'shift_jis_2004','shift_jisx0213',
'iso2022jp', 'iso2022_jp_1', 'iso2022_jp_2', 'iso2022_jp_3',
'iso2022_jp_ext','latin_1', 'ascii')
encoding = ''
for encoding in lookup:
try:
data = data.decode(encoding)
break
except:
pass
return data, encoding

def conv_encoding(data, to_enc="utf_8"):
"""
stringのエンコーディングを変換する
@param ``data'' str object.
@param ``to_enc'' specified convert encoding.
@return str object.
"""
lookup = ('utf_8', 'euc_jp', 'euc_jis_2004', 'euc_jisx0213',
'shift_jis', 'shift_jis_2004','shift_jisx0213',
'iso2022jp', 'iso2022_jp_1', 'iso2022_jp_2', 'iso2022_jp_3',
'iso2022_jp_ext','latin_1', 'ascii')
for encoding in lookup:
try:
data = data.decode(encoding)
break
except:
pass
if isinstance(data, unicode):
return data.encode(to_enc)
else:
return data



オリジナルは次のURLの方が作らていました。
これを流用しただけです。

http://speirs.blog17.fc2.com/blog-entry-4.html

文字コードの一覧はこちら…4.9.2 標準エンコーディング

こちらも参考になります。
http://php6.jp/python/2011/01/13/encoding/

上記のメソッドを使うことで、

  • エンコーディング不明なstring型→unicode

  • エンコーディング不明なstring型→指定のエンコードされたstring


が可能となります。

なお、unicode型を文字列にする場合は、


u'あいうえお'.encode('utf-8')



UTF-8のstring型をunicodeに変換する場合は、


'あいうえお'.decode('utf-8')



となります。

あとはもううまいことやるしかありません。。。
スポンサーサイト

⇒comment

Secret

名言集
全記事(数)表示
全タイトルを表示
ブログ内検索
Loading
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。