Flutter使用esc_pos_utils_plus打印£和€符号异常的修复方案
解决esc_pos_utils_plus打印£/€符号异常问题
问题现象
使用esc_pos_utils_plus包为XP-N160I打印机打印£和€符号时出现两种异常:
- 加载打印机配置文件并设置
CP1252编码表后,符号直接消失,输出为Amount 50 - 移除配置文件和编码表设置时,符号变为Û,输出为
Amount Û50
测试代码:
List<int> bytes = []; final profile = await CapabilityProfile.load('XP-N160I'); final generator = Generator(PaperSize.mm80, profile); bytes += generator.setGlobalCodeTable('CP1252'); // 也曾测试过CP437 bytes += generator.text("Amount £50"); bytes += generator.cut(); await _print(data: bytes);
修复方案
更换为打印机支持的编码表
XP-N160I小票打印机默认支持CP850编码,该编码包含£和€符号。将编码表替换为CP850尝试:bytes += generator.setGlobalCodeTable('CP850');手动发送ESC指令设置编码
如果setGlobalCodeTable方法不生效,直接发送ESC指令指定编码。设置CP850的指令为[0x1B, 0x74, 0x18]:List<int> bytes = []; final generator = Generator(PaperSize.mm80); // 不加载配置文件 bytes += [0x1B, 0x74, 0x18]; // 手动设置CP850编码 bytes += generator.text("Amount £50"); bytes += generator.cut(); await _print(data: bytes);直接使用字符编码值打印
若编码设置仍无效,可直接使用目标编码中符号对应的字符值。CP850中£对应0x9C,€对应0xE1:bytes += generator.text("Amount " + String.fromCharCode(0x9C) + "50");检查打印机配置文件
确认XP-N160I的配置文件是否包含CP850编码支持。若配置文件缺失对应项,可尝试不加载配置文件,直接手动设置编码后打印。
内容的提问来源于stack exchange,提问作者Sushang Nirola
相关产品推荐
相关产品推荐

