pythonのQRコードデコードで文字化け問題 2
前回の質問、「pythonのQRコードデコードで文字化けなくす 」でカタカナ混じりのテキストで文字化けが起きるた場合の回避策として例外処理の方法を教えてもらいその結果をテキストファイルの形で出力するため下記コードにしてみました。
import pyzbar.pyzbar
from PIL import Image
qr = pyzbar.pyzbar.decode(Image.open('d:/QRcode/qrcode_make.png'))
#print(qr)
try:
with open('d:/QRcode/QRcode.txt', 'w') as f:
print(qr[0].data.decode('utf-8').encode('shift-jis').decode('utf-8'), file=f)
except UnicodeDecodeError:
with open('d:/QRcode/QRcode.txt', 'w') as f:
print(qr[0].data.decode('utf-8'), file=f)
前回の「いろはイロハ色波」「さけサケ鮭」のQRコード共に問題なくデコード結果が出力されました。
そこで頭に絵文字を加えた場合や韓国語・アラビア語等コピペしたテキストでQRコードを作りデコードした場合デコード結果が
エラー(UnicodeEncodeError: 'cp932' codec can't encode character '\u231a' in position 0: illegal multibyte sequence)のためか出力されません。
因みに
import qrcode
text = 'text'
img = qrcode.make(text)
img.save('qrcode_make.png')
でQRコードを生成
教えてもらったデコードの例外処理をする下記コードの結果
print(qr)
try:
print(qr[0].data.decode('utf-8').encode('shift-jis').decode('utf-8'))
except UnicodeDecodeError:
print(qr[0].data.decode('utf-8'))
元テキスト:⌚さけサケ鮭
デコード結果:⌚さけサケ鮭
元テキスト:안녕
デコード結果:エラー(UnicodeEncodeError: 'shift_jis' codec can't encode character '\uc548' in position 0: illegal multibyte sequence
encoding with 'shift-jis' codec failed)
例外処理をしない場合,デコード結果は「안녕」と読み込まれていました。
カタカナひらがな混じりのテキストを使う方に問題があるのかどうか分かりませんがせめて絵文字の場合だけでもテキストファイルへの正しく出力する方法をお教えください。