2

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

我试过这个:

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

但字符不匹配。

4

3 回答 3

4

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

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

您必须使用您的特定打印机检查可用的代码页和要在ESC t n命令中使用的编号。EPSON ESC/POS 文档ESC t列出了可用于 EPSON 打印机的代码页。

对于 EPSON 打印机,有用的文档可在TM 打印机的字符代码表页面中找到。检查Single-byte Characters/Code Pages部分。

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

于 2016-09-23T08:38:18.310 回答
1

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

file.write("#$@°\\è^ùàòèì\n".getBytes("Cp858"));
于 2012-05-17T16:58:34.587 回答
0

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

new PrintStream(stream,true,"Cp858")

然而随着

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

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

于 2012-05-18T07:36:15.857 回答