使用Flask打印Alexa购物清单时德语变音字符显示异常如何解决
德语变音字符打印乱码修复方案
问题根因
你遇到的乱码问题由两个错误导致:
- 字节流转字符串的处理逻辑错误:
request.get_data()返回的是UTF-8编码的原始字节流,直接调用str(content)会把字节对象的字面表示(包含b'前缀、十六进制转义字符)直接转为普通字符串,而非实际的文本内容,这就是你看到\xc3\xbcl这类字符的直接原因。 - 未给热敏打印机设置支持德语变音的字符编码:ESC/POS协议打印机默认使用ASCII编码,本身不支持ü、ä、ö这类德语变音字符,需要手动切换到对应字符集。
修复后的完整代码
#!flask/bin/python from flask import Flask, request from escpos.printer import Usb p = Usb(0x0416, 0x5011) # 给打印机设置支持西欧语言的编码,兼容德语变音字符 p.charcode('WPC1252') app = Flask(__name__) @app.route('/') def index(): return 'Your Flask server is working!' @app.route('/list') def list(): content = request.get_data() # 直接把字节流按UTF-8解码为正常字符串,不需要后续处理b'前缀 str_content = content.decode('utf-8') str_split = str_content.splitlines() newlist = [] for word in str_split: word = word.split(',') newlist.extend(word) p.text("Shopping List:\n") r = 1 for x in newlist: p.text(f"{r}. {x}\n") r += 1 return 'x' if __name__ == '__main__': app.run(debug=True, host='0.0.0.0')
补充说明
如果使用WPC1252编码仍然有显示异常,可以尝试替换为ISO-8859-1或者CP850,不同厂商的打印机支持的字符集略有差异,依次尝试即可找到适配的编码。
内容的提问来源于stack exchange,提问作者JustusJonas
相关产品推荐
相关产品推荐

