Pythonでエンコーディングで使用できない文字を数値文字参照に変換する

エンコーディングで使用できない文字を数値文字参照に変換する方法。

ユニコード文字列を指定したエンコーディングに変換したとき、変換できない文字があるとエラーが送出されます。

f = open('sjis.html', 'w')
f.write(u'<html><body>©®</body></html>'.encode('shift_jis'))
f.close()

エラーメッセージ

UnicodeEncodeError: 'shift_jis' codec can't encode character u'\xa9' in position 12: illegal multibyte sequence

encode()の第2引数に’xmlcharrefreplace’を指定すると、変換できない文字は数値文字参照に変換されます。

f = open('sjis.html', 'w')
f.write(u'<html><body>©®</body></html>'.encode('shift_jis', 'xmlcharrefreplace'))
f.close()

出力結果

<html><body>&#169;&#174;</body></html>

‘xmlcharrefreplace’を使えば、ファイルに指定したエンコーディングを使い、ブラウザでユニコード文字列を表示することが出来ます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください