Python全角変換

全角波('~')や,全角マイナス('-')をPythonで扱うための注意!
UnicodeからSJISへ変換しようとすると全角波('~')や全角マイナス('-')が存在すると次のようなエラーになってしまう.
UnicodeEncodeError: 'shift_jis' codec can't encode charactor u'\u****' in position **: illegal multibyte sequence
どうやら,対応するコードがないらしい.そのため,適当な文字に変換するとこのエラーは避けられる.
わかってしまえば,簡単なのだが,これに気づくのにとっても苦労した.

サンプルプログラム

def uniuni(str):
	list = [\
[u'\uFF5E', u'\u301c'], # '~'→'〜' \
[u'\u2225', u'\u2016'], # '∥'→'‖' \
[u'\uff0d', u'\u2212'], # '-'→'−'  \
[u'\uFFE0', u'\u00A2'], # '¢'→'¢'  \
[u'\uFFE1', u'\u00A3'], # '£'→'£'  \
[u'\uFFE2', u'\u00Ac'], # '¬'→'¬'  \
]
	for lt in list:
		str = str.replace( lt[0], lt[1] )
	return str

サンプルプログラムの使用例

#!/usr/local/bin/python
#coding: utf-8

from uniuni import uniuni 

str = u'~∥-¢£¬'

utf = str.encode('utf-8') # OK
#sjis = str.encode('sjis') # NG
sjis = uniuni( str ).encode('sjis') # OK

print sjis

ダウンロード

サンプルプログラム
サンプルプログラムの使用例

参考HP