【问题标题】:Convert two-digit hex code to Unicode equivalent将两位十六进制代码转换为等效的 Unicode
【发布时间】:2013-10-14 11:30:39
【问题描述】:

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

此打印格式页面在我的 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 standard

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

【问题讨论】:

  • D5 十六进制 = 213,而不是 201

标签: java android unicode hex extended-ascii


【解决方案1】:

你为什么要加倍努力?

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

只使用这些...但要注意,不同的字体可能代表这些不同...

【讨论】:

  • 假设不同的格式将使用不同的十六进制值来表示它们扩展的 ASCII 对应物。这对我来说似乎是一个硬编码的解决方案。你是如何将这些 ASCII 字符表示为字符串的?
  • @F.Ali 如果它会使用不同的字符代码,那么无论你做什么,它都不会代表你想要的字符。 “D5”将与我的解决方案一样硬编码......顺便说一句,您可以通过 Alt + 在 Windows 上获取 ASCII 字符,因此在输入 201 时按住 Alt 键小键盘。我不确定其他操作系统,我从未在其他任何地方尝试过这一点......
  • D5 只是一个例子……程序接收到的十六进制值可以是任何值。
  • @F.Ali 您也可以将确切的chars 存储到 zour 程序外部:XML、.property 文件、DB 等等……我仍然不明白问题出在哪里直接拥有字符,而不是它们的表示
  • 随着我对我的问题的了解越来越多,我已经改写了这个问题。感谢您的帮助,并希望这能解决任何问题。
【解决方案2】:

听起来您可以使用字符串构造函数that takes byte[] and Charset arguments,使用适合您接收的数据的字符集(“IBM437”)。

【讨论】:

    猜你喜欢
    • 2020-05-27
    • 2019-01-01
    • 2021-04-30
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 2013-08-03
    • 2012-07-29
    • 2021-09-19
    相关资源
    最近更新 更多