python qr code zeilenumbruch?

1 Antwort

Wie erzeugst du denn den QR-Code?

Wenn ich beispielsweise mit Python (Version 3.9.4) und dem qrcode-Modul (Version 7.3.1) den folgenden Code ausführe...

import qrcode
img = qrcode.make('Zeile 1\nZeile 2')
img.save("qrcode.png")

... erhalte ich den folgenden QR-Code...

Bild zum Beitrag

... der den Text...

Zeile 1
Zeile 2

... als Information enthält.

Das mit dem Zeilenumbruch mit der \n-Escape-Sequenz klappt also bei mir bei diesem Beispiel ohne Probleme.

============

Kann es vielleicht sein, dass du bei sowas nicht beispielsweise den Text...

"Zeile 1\nZeile 2"

Zeile 1
Zeile 2

... sondern beispielsweise sowas wie...

"Zeile 1\\nZeile 2"

Zeile 1\nZeile 2

...vorliegen hast?

Was wird dir angezeigt, wenn du den Text einfach mit der print()-Funktion ausgibst? Wird dir da bei der Ausgabe ein Zeilenumbruch oder ein ausgeschriebenes „\n“ angezeigt?

 - (Python, QR-Code)
Mario81739 
Fragesteller
 28.12.2021, 17:35

hallo danke für die Antwort. Ich erstelle den qr code mit pyqrcode.create("Text \n Text") und beim decoden wird dann ausgegeben Text \n Text anstatt einem Zeilenumbruch

0
Mario81739 
Fragesteller
 28.12.2021, 17:41
import pyqrcode

inhalt = "X\n bla bla bla"

url = pyqrcode.create(inhalt, error="Q")

print(url.png("build/qrcod.png", scale=10))


from pyzbar.pyzbar import decode
from PIL import Image

dec_data = decode(Image.open("build/qrcod.png"))

print(dec_data[0].data)

ausgabe: b'X\n bla bla bla'

das ist mein Code. & weißt du vllt. wie Ich das b und die ' wegbekomme?

Dankkkeee

0
mihisu  29.12.2021, 16:28
@Mario81739

Das vorangestellte „b“ liegt daran, da es sich nicht um einen String handelt, sondern es sich um ein Bytes-Objekt handelt.

Wenn nichts dagegen spricht, encodiert pyqrcode.create() den String mit ISO 8859-1 (Latin-1), wenn ich das in der Dokumentation des pyqrcode-Moduls richtig gesehen habe. Dementsprechend kann man nun umgekehrt das Bytes-Objekt entsprechend decodieren, um einen String zu erhalten...

decoded_text = b'X\n bla bla bla'.decode('iso-8859-1')
print(decoded_text)

Wenn man sich dann den String ausgeben lässt, wird auch das '\n' entsprechend wieder als Zeilenumbruch ausgegeben, was zuvor bei der Anzeige des Bytes-Objekts noch als '\n' dargestellt worden ist.

Also...

Code:

import pyqrcode
inhalt = "X\n bla bla bla"
url = pyqrcode.create(inhalt, error="Q")
#print(url.png("build/qrcod.png", scale=10))

from pyzbar.pyzbar import decode
from PIL import Image
dec_data = decode(Image.open("build/qrcod.png"))
#print(dec_data[0].data)

dec_text = dec_data[0].data.decode('iso-8859-1')
print(dec_text)

Ausgabe:

X
 bla bla bla
0