2

我有一个打印格式页,它使用十六进制值来表示扩展的 ASCII 字符(类似于 IBM代码页 437中的字符)。我正在使用此作为参考。我对格式页面没有发言权,因此无法更改。

这个打印格式页面在我的 Android 应用程序中用于在发送到打印机时将相关数据放置在正确的位置。最终结果应该类似于发票。

我在 Java 中表示某些 ASCII 字符时遇到问题。例如,上表中的字符 201、205 和 187。当按该顺序组合时,它们来自我的数据表的漂亮边框。

在Java中,我试图从十六进制转换为ASCII,如下所示:

String hex = "D5"; //this is just for example
int n = Integer.parseInt(hex, 16); //this should return a value of 213
char c = (char)n;

“c”最终变成了一个看起来很古怪的角色,这不是我想要的。我现在意识到这是因为 Java 使用的是Windows-1252/CP-1252 标准

我认为解决方案是将两位十六进制值转换为相应的 Unicode 值,但无法弄清楚如何。任何帮助,将不胜感激。

4

2 回答 2

0

听起来您可以使用带有byte[] 和 Charset arguments的 String 构造函数,使用适合您接收的数据的 Charset(“IBM437”)。

于 2013-10-07T20:21:46.057 回答
0

你为什么要加倍努力?

private static final char TOP_LEFT = '╔';
private static final char HORIZONTAL = '═';
private static final char TOP_RIGHT = '╗';

只需使用这些...但请注意,不同的字体可能会以不同的方式表示这些...

于 2013-10-07T19:20:39.550 回答