我试图使一些文本显示在连接到Raspberry Pi的16x2 LCD上(使用Adafruit_CircuitPython_CharLCD库)。在代码中提供文本字符串后,一切正常,但是在运行脚本时将其作为参数提供时,无法获得特殊/转义字符以正确显示。
我尝试使用sys.argv[1]
将os.fsencode(sys.argv[1])
转换为字节,然后解码为utf-8或ascii。
我已经在库中搜索了任何特定的编码参考。我对编码了解不多。
#!/usr/bin/env python3
#lcd.py
import os, sys
from time import sleep
import board
import digitalio
import adafruit_character_lcd.character_lcd as characterlcd
#LCD setup
lcd_columns = 16
lcd_rows = 2
lcd_rs = digitalio.DigitalInOut(board.D5)
lcd_en = digitalio.DigitalInOut(board.D6)
lcd_d4 = digitalio.DigitalInOut(board.D13)
lcd_d5 = digitalio.DigitalInOut(board.D16)
lcd_d6 = digitalio.DigitalInOut(board.D19)
lcd_d7 = digitalio.DigitalInOut(board.D26)
lcd = characterlcd.Character_LCD_Mono(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows)
#Special character definitions
degree = bytes([0xc, 0x12, 0x12, 0xc, 0x0, 0x0, 0x0, 0x0])
lcd.create_char(0, degree)
def display(text):
lcd.clear()
lcd.message = text
if __name__ == '__main__':
display(" T: 19.5\x00C\nSet 21.0\x00C")
sleep(5)
display(sys.argv[1])
我这样称呼我的脚本:
$ python3 lcd.py " T: 19.5\x00C\nSet 21.0\x00C"
现在,它可以正确显示五秒钟:
T: 19.5°C
Set 21.0°C
然后显示这种美丽:
T: 19.5¥x00C¥nS
第二行为空(\ n无法识别)。
任何帮助将不胜感激。 谢谢!
答案 0 :(得分:0)
问题是这一行:
Id
1 True
2 False
3 False
4 True
5 False
当它是Python文字时将RangeAssignor
字符序列解释为ASCII 0,您的设备将其显示为度数符号。
但是当在命令行上输入数据时,则" T: 19.5\x00C\nSet 21.0\x00C"
表示4个字符\x00
。很难推荐一种解决方法,因为从命令行输入字符null很难。许多干预软件都将该字符视为字符串终止符。因此,如果您必须使用\x00
作为特殊字符替代,让程序继续管理格式(空字符,回车符,“ Set”和“ T:”),而您只需从命令行。将\ x 0 0
调用更改为
\00
,然后在运行程序时按以下步骤操作:
display()
这是通过将两个温度作为单独的值传入display(" T: {1}\x00C\nSet {2}\x00C".format(*sys.argv))
,然后将$ python3 lcd.py 19.5 21.0
放入要显示的字符串中来实现的。