Java IBM-860 编码问题

Java IBM-860 Encoding Problems

我有一台配置为使用 PC860 代码页的打印机。

根据本站(http://www.madore.org/~david/computers/unicode/cstab.html#CP860),我们有以下内容:

HEX    CHAR
0xB3   │
0x86   Á

所以,我正在尝试将以下字符串发送到打印机

Sring test = "\u00B3Á\u00B3"

但是我在调​​用 String.getBytes():

时除了使用编码之外还得到了不希望的结果

使用 ISO-8859-10xB3 可以正确打印,但 Á 不能。 Á 被映射到 0xC1

使用 IBM-860Á 可以正确打印,但 \u00B3 不能。 \u00B3 被映射到 0x3F.

使用 ISO-8859-1,如果我将字符串更改为 \u00B3\u0086\u00B3(将 À 替换为它的十六进制值),则会获得正确的结果。

我无法意识到自己做错了什么。有人可以显示我缺少的东西吗?

void printString(String str) throws IOException {

    //os is a OutputStream

    //Using IBM-860 Charset...
    os.write(str.getBytes(Charset.forName("IBM-860")));

    //Using ISO-8859-1 Charset...
    os.write(str.getBytes(Charset.forName("ISO-8859-1")));

}

Java 字符串始终 UTF-16 编码 - 因此您需要对要使用的字符使用 UTF-16 编码:

String test = "│Á";
os.write(test.getBytes(Charset.forName("IBM-860")));

如果您已经知道字节序列是什么样的and/or您的编码不受 JVM 支持,那么不要使用字符串;将字节直接写入 OutputStream:

byte[] b = { (byte) 0xB3, (byte) 0x86 };
os.write(b);