我必须打印一个原始文本打印机,我必须在其中设置代码页字符集。我发现最适合我的应用程序的字符集是 IBM858。现在的问题是将字符串编码到此代码页。
我试过这个:
test = new String("#$@°\\è^ùàòèì\n".getBytes(),"Cp858");
file.write(test.getBytes());
但字符不匹配。
我必须打印一个原始文本打印机,我必须在其中设置代码页字符集。我发现最适合我的应用程序的字符集是 IBM858。现在的问题是将字符串编码到此代码页。
我试过这个:
test = new String("#$@°\\è^ùàòèì\n".getBytes(),"Cp858");
file.write(test.getBytes());
但字符不匹配。
使用处理国际字符集的 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 代码页打印一些国际字符,它已经过时了。
这会将 UTF-16 字符串编码为 Cp858:
file.write("#$@°\\è^ùàòèì\n".getBytes("Cp858"));
使用原始文本打印机打印我完全解决了这个问题:
new PrintStream(stream,true,"Cp858")
然而随着
file.write("#$@°\\è^ùàòèì\n".getBytes("Cp858"));
打印机遗漏了一些字符,我不知道是打印机还是 java 问题。