So-net無料ブログ作成
検索選択

emダッシュとかいうやつの unicode.encode() で、UnicodeEncodeError 。 MySQL から探す [Python/Django/Zope]

python で、 unicode -> cp932 に 変換しようとしたら、UnicodeEncodeError になった。

UnicodeEncodeError: 'cp932' codec can't encode character u'\u2014' in position 40: illegal multibyte sequence
>>> s = u'\u2014'
>>> s
u'\u2014'
>>> s.encode('utf-8')
'\xe2\x80\x94'
>>> print s.encode('utf-8')
—
>>> s.encode('cp932')
Traceback (most recent call last):
  File "", line 1, in 
  UnicodeEncodeError: 'cp932' codec can't encode character u'\u2014' in position 0: illegal multibyte sequence
>>>

emダッシュとかいうらしい

http://ja.wikipedia.org/wiki/%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5_%28%E8%A8%98%E5%8F%B7%29

元データは utf-8 の MySQL の中にあったのだが、ではどう探せばいいか。ここ↓にあった
http://stackoverflow.com/questions/12189955/convert-characters-pasted-from-word-in-php-and-mysql

SELECT * FROM foo WHERE col like CONCAT('%', UNHEX('E28094'), '%')

s.encode('cp932', 'ignore')
とか
s.encode('cp932', 'replace'0
とかすることで許してもらえた。

思えば、昔は unicode -> jis 変換で、丸数字に当たったりして、 'ignore' とか 'replace' とかしてたけど、メールの日本語変換の必要もなくなって、 Web でも UTF-8 で表示するのがあたりまえになってきたので、そんなの忘れてたなぁ
コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

Facebook コメント

トラックバック 0

トラックバックの受付は締め切りました