サラリーマンのすらすらIT日記

IT関連を中心とした日々を綴ります。
--/--/--

スポンサーサイト

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

Python-EUC-JPのDBの件、一波乱あったがなんとか解決

PythonでEUC-JPのDBを扱う件は、一昨日で解決したかに思えましたが、まだ一波乱ありました。結果的には解決したので、備忘録を兼ねて書いておきます。

普通にprintで表示させると、\x8e\xc0 あるいは u'\uff80' といった表示になってしまうので、何とかする必要があります。これは「PythonのUnicodeEncodeErrorを知る」というサイトに解決策が載っていました。私の環境はPython 2.7ですが、このサイトと同じ対策でできました。

DBのデータはEUC-JPなので、データdataに対して、

print unicode(data, "euc_jp")

とします。これによりEUC-JPのデータはunicode型になります。これでprint文を実行すると、端末画面(TeraTerm)に正しく表示されます。これは

print data.decode("euc_jp")

でも同じことなので、OKです。

これでできたと思うのはまだ早い!出力結果をファイルにリダイレクトするとUnicodeEncodeErrorになります。ここがPythonの厄介なところで、出力形式によって動作を変えてしまいます。これは上記サイトの「はまりどころ:パイプ」に説明があります。

対応方法は、

import sys
import codecs
sys.stdout = codecs.lookup('utf_8')[-1](sys.stdout)

をあらかじめ追加しておくとよい。リダイレクトではなくて、ファイルに直接出力させる場合は、

import sys
import codecs
f = open('filename', 'w')
f = codecs.lookup('utf_8')[-1](f)
f.write(data)

とすればよい。

上記サイトがなければ、くじけてしまうところでした。助かりました。この方には感謝です。

スポンサーサイト

コメント

コメントの投稿

  • URL
  • コメント
  • パスワード
  • 秘密
  • 管理者にだけ表示を許可する

トラックバック

トラックバックURL:http://sookibizviz.blog81.fc2.com/tb.php/1758-b821d5bc

■  カレンダー

09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

■  プロフィール

sookibizviz

Author:sookibizviz
仕事の内容やソフトの紹介を交えながら、日々の悪戦苦闘を綴っていきます。

■  最新記事

■  最新コメント

■  最新トラックバック

■  月別アーカイブ

■  カテゴリ

未分類 (64)
BizViz (24)
IT (1119)
計量 (76)
環境 (26)
数学 (181)
ニュース (46)
本 (187)
音楽 (113)
囲碁 (5)
将棋 (26)
ブログ (14)
日記 (19)

■  FC2カウンター

■  検索フォーム

■  RSSリンクの表示

■  QRコード

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