QR codes I have seen are mostly image files. But can you create QR codes using plain text?
For example ASCII and UTF-8 have black boxes as characters. Can I use those together with spaces to create a QR code?
QR codes I have seen are mostly image files. But can you create QR codes using plain text?
For example ASCII and UTF-8 have black boxes as characters. Can I use those together with spaces to create a QR code?
Yes! There is a utility called qrencode that can render these for you.
The only really important factor for a QR code is that the 2D array has "darker" and "ligher" pixels / segments. It can be colored too, though contrast can start to be an issue.
Your ability to read this QR code will likely depend on the camera's resolution, distance, and the software you're using.
qrencode -t ASCIIi 'https://superuser.com/questions/1420001/is-it-possible-to-write-a-qr-code'
Note: I used -t ASCIIi (Inverted ASCII) because my terminal is White-on-Black.
This mode works by setting the background color to black or white, and printing a number of space characters.
qrencode -t ANSI 'https://superuser.com/questions/1420001/is-it-possible-to-write-a-qr-code'
Some of the raw characters written to the terminal are shown below, these are ANSI escape codes. An "escape" character has a value of 0x1b and can often be written as \e.
\e[40m sets the background color to black\e[47m sets the background color to white0x20 is an ASCII spaceThere is also a UTF-8 mode (-t UTF8). This mode uses the "half block" characters to increase the density, and cut the line count by half.
Screenshot from @grawity (thanks)
qrencode -t UTF8 'https://superuser.com/questions/1420001/is-it-possible-to-write-a-qr-code'
qrencode -t ANSIUTF8 'https://superuser.com/questions/1420001/is-it-possible-to-write-a-qr-code'
Attie's answer with qrencode is great, but for some reason it always outputs a qr code with inverted colors that my Barcode Scanner app can't read.
Inverting the UTF-8 output is hardly trivial, so I thought I'd leave it here for others ;)
qrencode=`qrencode -t UTF8 "https://superuser.com/q/1420001/551559"`
echo "${qrencode}"
replace black
qrencode=$(echo "${qrencode}" | sed s/echo -e '\xe2\x96\x88'/A/g)
echo "${qrencode}"
replace white
qrencode=$(echo "${qrencode}" | sed s/\ /B/g)
echo "${qrencode}"
swap black for white
qrencode=$(echo "${qrencode}" | sed s/A/\ /g)
echo "${qrencode}"
swap white for black
qrencode=$(echo "${qrencode}" | sed s/B/echo -e '\xe2\x96\x88'/g)
echo "${qrencode}"
replace "Upper Half Block"
qrencode=$(echo "${qrencode}" | sed s/echo -e '\xe2\x96\x80'/A/g)
echo "${qrencode}"
replace "Lower Half Block"
qrencode=$(echo "${qrencode}" | sed s/echo -e '\xe2\x96\x84'/B/g)
echo "${qrencode}"
swap upper for lower
qrencode=$(echo "${qrencode}" | sed s/A/echo -e '\xe2\x96\x84'/g)
echo "${qrencode}"
swap lower for upper
qrencode=$(echo "${qrencode}" | sed s/B/echo -e '\xe2\x96\x80'/g)
echo "${qrencode}"
I use this so that I can cryptographically sign a utf-8 plaintext message with a qr-code and display it on my website in html.
To achieve this without html breaking the qr code readability with line spacing, I put the qr code inside of a <pre> block with css styles as follows:
<pre style="line-height:1em; letter-spacing: -1px; font-size: x-large;">
...
</pre>
For a live example, see