【问题标题】:Java escpos charset encodingJava escpos 字符集编码
【发布时间】:2012-05-17 16:51:39
【问题描述】:

我必须打印一个原始文本打印机,我必须在其中设置代码页字符集。我发现最适合我的应用程序的字符集是 IBM858。 现在的问题是将字符串编码到这个代码页。

我试过了:

test = new String("#$@°\\è^ùàòèì\n".getBytes(),"Cp858");
file.write(test.getBytes());

但字符不匹配。

【问题讨论】:

    标签: java encoding character-encoding


    【解决方案1】:

    使用 ESC/POS 打印机处理国际字符集,您必须:

    • 设置打印机的代码页:例如ESC t 40 将选择代码页ISO8859-15。即在Java中outputStream.write( new byte[]{ 0x1B, 0x74, 40 } );
    • 编码字符串要使用相同的代码页打印:outputStream.write(theStringToPrint.getBytes("ISO8859-15"));

    您必须使用您的特定打印机检查可用的代码页以及在ESC t n 命令中使用的编号。 The EPSON ESC/POS documentation 代表 ESC t 列出了 EPSON 打印机可用的代码页。

    对于 EPSON 打印机,有用的文档可在页面 Character Code Tables for TM printers 中找到。检查Single-byte Characters/Code Pages 部分。

    不要使用国际字符集ESC r n 命令:它将替换一些 ASCII 字符以便能够用 ASCII 代码页打印一些国际字符,它已经过时了。

    【讨论】:

      【解决方案2】:

      这会将 UTF-16 字符串编码为 Cp858:

      file.write("#$@°\\è^ùàòèì\n".getBytes("Cp858"));
      

      【讨论】:

      • 有效!谢谢你。但是它错过了一些特定的字符,如大写“ÙÀÒÈÌ”、欧元符号等。但它比每 128 个字符映射一次要好!
      • 那些大写字母出现在 Cp858 中;不支持欧元符号。听起来 Cp858 不是正确的字符编码。
      • 也许我发现了问题,它错过了负值...例如欧元符号是 (dec)213 (hex)DE,如果我运行此代码: Integer.toHexString("€" .getBytes("Cp858")[0]) 我 se "ffffffd5" 而不仅仅是 "d5" :-/
      • 我明白了。使用 new PrintStream(stream,true,"Cp858") 效果很好!
      【解决方案3】:

      使用原始文本打印机打印我完全解决了这个问题:

      new PrintStream(stream,true,"Cp858")
      

      然而

      file.write("#$@°\\è^ùàòèì\n".getBytes("Cp858"));
      

      打印机遗漏了一些字符,我不知道是打印机问题还是 java 问题。

      【讨论】:

        猜你喜欢
        • 2013-11-10
        • 2012-11-09
        • 2011-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多