gpt4 book ai didi

Java IBM-860 编码问题

转载 作者:行者123 更新时间:2023-11-30 10:13:11 25 4
gpt4 key购买 nike

我有一台配置为使用 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")));

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

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

关于Java IBM-860 编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51480710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com