Java escpos字符集编码

Java escpos字符集编码,java,encoding,character-encoding,Java,Encoding,Character Encoding,我必须打印一个原始文本打印机,在那里我必须使用代码页字符集。我发现我的应用程序最好的字符集是IBM858。 现在的问题是将字符串编码到此代码页 我试过这个: test = new String("#$@°\\è^ùàòèì\n".getBytes(),"Cp858"); file.write(test.getBytes()); 但是字符不匹配。这将UTF-16字符串编码为Cp858: file.write("#$@°\\è^ùàòèì\n".getBytes("Cp858")); 使用原始文

我必须打印一个原始文本打印机,在那里我必须使用代码页字符集。我发现我的应用程序最好的字符集是IBM858。 现在的问题是将字符串编码到此代码页

我试过这个:

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

但是字符不匹配。

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

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

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

new PrintStream(stream,true,"Cp858")
然而

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

打印机丢失了一些字符,我不知道是打印机还是java故障。

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

  • 设置打印机的代码页:例如
    ESC t 40
    将选择代码页
    ISO8859-15
    。i、 e.在Java
    outputStream.write中(新字节[]{0x1B,0x74,40})
  • 对要使用相同代码页打印的字符串进行编码:
    outputStream.write(theStringToPrint.getBytes(“ISO8859-15”)
您必须使用特定的打印机检查可用的代码页和要在
ESC t n
命令中使用的编号。对于
ESC,t
列出了可用于爱普生打印机的代码页

对于爱普生打印机,可在页面中找到有用的文档。检查
单字节字符/代码页
部分


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

它起作用了!非常感谢。然而,它遗漏了一些特殊字符,如大写字母“ÙÀÒÈÌ”、euro simbol等,但它比每128个字符映射一次要好!!这些大写字母出现在Cp858中;不支持欧元符号。听起来Cp858不是正确的字符编码。也许我发现了问题,它忽略了负值。。。例如,欧元符号是(dec)213(hex)DE,如果我运行以下代码:Integer.toHexString(€“.getBytes(“Cp858”)[0]),我使用“ffffffd5”,而不仅仅是“d5”:-/i-get。使用新的PrintStream(stream,true,“Cp858”)可以很好地工作!