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-1
,0xB3
可以正确打印,但 Á
不能。 Á
被映射到 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);
我有一台配置为使用 PC860 代码页的打印机。
根据本站(http://www.madore.org/~david/computers/unicode/cstab.html#CP860),我们有以下内容:
HEX CHAR
0xB3 │
0x86 Á
所以,我正在尝试将以下字符串发送到打印机
Sring test = "\u00B3Á\u00B3"
但是我在调用 String.getBytes():
时除了使用编码之外还得到了不希望的结果使用 ISO-8859-1
,0xB3
可以正确打印,但 Á
不能。 Á
被映射到 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);