Search code examples
pythoncharacter-encodingqr-code

Generating and reading QR codes with special characters


I'm writing Python program that does the following:

Create a QR code > Save to a png file > Open the file > Read the QR code information

However, when the data on the code has special characters, I got some confusion output data. Here's my code:

import pyqrcode
from PIL import Image
from pyzbar.pyzbar import decode


data = 'Thomsôn Gonçalves Ámaral,325.432.123-21'

file_iso = 'QR_ISO.png'
file_utf = 'QR_Utf.png'

#creating QR codes
qr_iso = pyqrcode.create(data) #creates qr code using iso-8859-1 encoding
qr_utf = pyqrcode.create(data, encoding = 'utf-8') #creates qr code using utf-8 encoding
#saving png files
qr_iso.png(file_iso, scale = 8)
qr_utf.png(file_utf, scale = 8)

#Reading  and Identifying QR codes

img_iso = Image.open(file_iso)
img_utf = Image.open(file_utf)

dec_iso = decode(img_iso)
dec_utf = decode(img_utf)

# Reading Results:

print(dec_iso[0].data)
print(dec_iso[0].data.decode('utf-8'))
print(dec_iso[0].data.decode('iso-8859-1'),'\n')

print(dec_utf[0].data)
print(dec_utf[0].data.decode('utf-8'))
print(dec_utf[0].data.decode('iso-8859-1'))

And here's the output:

b'Thoms\xee\x8c\x9e Gon\xe8\xbb\x8blves \xef\xbe\x81maral,325.432.123-21'
Thoms Gon軋lves チmaral,325.432.123-21
Thoms Gon軋lves ï¾maral,325.432.123-21 

b'Thoms\xef\xbe\x83\xef\xbd\xb4n Gon\xef\xbe\x83\xef\xbd\xa7alves \xef\xbe\x83\xef\xbc\xbbaral,325.432.123-21'
Thomsテエn Gonテァalves テ[aral,325.432.123-21
Thomsテエn Gonテァalves テ[aral,325.432.123-21

For simple data it works just fine, but when data has characters like 'Á, ç ' and so on this happens. Any ideas of what should I do to fix it?

Additional information:


Solution

  • Try to encode the UTF-8 decoded result with shift-jis and decode the result again with UTF-8.

    dec_utf[0].data.decode('utf-8').encode('shift-jis').decode('utf-8')
    

    This works at least with your example where the QR code uses UTF-8 as well.

    See also https://github.com/NaturalHistoryMuseum/pyzbar/issues/14