You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 16:01:02