Pythonで「~」をエンコードすると例外が発生
Pythonで「~」をSJISやEUCにエンコードすると例外が発生します。
※cp932やmbcsを使用すれば例外は発生しません。
■検証したコード
上記のプログラムを実行すると・・・
と表示されます。
文字コード「U+FF5E」を文字コード表で見てみると・・・

Fullwidth Tildeとなっており、さらにWebで調べるとWindowsの問題のようです。
・WAVE DASH - FULLWIDTH TILDE問題
これはFullwidth TildeをWave Dashに変換すれば解決できるようです。

下記に修正したプログラムと出力結果を掲載します。
※cp932やmbcsを使用すれば例外は発生しません。
■検証したコード
#!/usr/bin/env python
# -*- coding: utf-8 -*-
s = u"~"
try:
s.encode("shift_jis")
print "shift_jis ok"
except UnicodeEncodeError, e:
print e
try:
s.encode("shift_jis_2004")
print "shift_jis_2004 ok"
except UnicodeEncodeError, e:
print e
try:
s.encode("shift_jisx0213")
print "shift_jisx0213 ok"
except UnicodeEncodeError, e:
print e
try:
s.encode("euc_jp")
print "euc_jp ok"
except UnicodeEncodeError, e:
print e
try:
s.encode("utf8")
print "utf8 ok"
except UnicodeEncodeError, e:
print e
上記のプログラムを実行すると・・・
'shift_jis' codec can't encode character u'\uff5e' in position 0: illegal multibyte sequence
'shift_jis_2004' codec can't encode character u'\uff5e' in position 0: illegal multibyte sequence
'shift_jisx0213' codec can't encode character u'\uff5e' in position 0: illegal multibyte sequence
'euc_jp' codec can't encode character u'\uff5e' in position 0: illegal multibyte sequence
utf8 ok
と表示されます。
文字コード「U+FF5E」を文字コード表で見てみると・・・

Fullwidth Tildeとなっており、さらにWebで調べるとWindowsの問題のようです。
・WAVE DASH - FULLWIDTH TILDE問題
これはFullwidth TildeをWave Dashに変換すれば解決できるようです。

下記に修正したプログラムと出力結果を掲載します。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import string
s = u"~"
s = string.replace(s, u'\uff5e', u'\u301c')
try:
s.encode("shift_jis")
print "shift_jis ok"
except UnicodeEncodeError, e:
print e
try:
s.encode("shift_jis_2004")
print "shift_jis_2004 ok"
except UnicodeEncodeError, e:
print e
try:
s.encode("shift_jisx0213")
print "shift_jisx0213 ok"
except UnicodeEncodeError, e:
print e
try:
s.encode("euc_jp")
print "euc_jp ok"
except UnicodeEncodeError, e:
print e
try:
s.encode("utf8")
print "utf8 ok"
except UnicodeEncodeError, e:
print e
shift_jis ok
shift_jis_2004 ok
shift_jisx0213 ok
euc_jp ok
utf8 ok
ラベル: Python

0 件のコメント :
コメントを投稿
この投稿へのリンク :
リンクを作成
<< ホーム