【问题标题】:How to convert hexadecimal byte to Unicode in Java如何在 Java 中将十六进制字节转换为 Unicode
【发布时间】:2011-09-06 01:03:56
【问题描述】:

我想将十六进制字节转换为 Unicode。我在 Windows-1250 中有十六进制 0x80,我想转换为 '\u0402'。是否可以使用没有开关的标准方法。

【问题讨论】:

  • 您想要字符 /u0402 还是想要一个值为 "/u0402" 的实际字符串?
  • 我想编写一个方法,它将所有大于 0x80 的十六进制数转换为字符。
  • 这个问题在所使用的转换技术上非常模糊。 0x80 恰好是扩展 ASCII 和 Unicode 中的控制字符,不能直接映射到 \u0402(西里尔字符集中的字符),除非指定了明确的编码规则(不是这种情况)。
  • 如果您的字节值\0x80 显示为Ђ,那么您使用CP-1251。在 CP-1250 中为

标签: java unicode hex


【解决方案1】:

\u0402 被命名为 CYRILLIC CAPITAL LETTER DJE。我猜,你有一些文本采用 a different CP1251 字符编码,0x80 映射到同一个西里尔字母的编码。

尝试识别您当前文本的编码(您的字节)并使用

String s = new String(myBytes, "Cp1251");

将字节读入字符串。之后,您可以使用正确的编码再次将字符串转换为字节。

进一步阅读

【讨论】:

  • 我使用 Cp1250 并且我有正确的字符编码。 DJE 我想发送到嵌入式系统。
  • 我不知道为什么这最初被否决,但如果要考虑这里和a related SO thread 中的建议,Cp1250 中的 0x80 可以翻译成 UTF-8/16 中的 0x0402 (或其他 Unicode 编码)使用 Andreas 建议的中间 UTF-16 编码。
  • @Gogoo - 0x80 in cp1250 是欧元货币字符(\u20AC),至少根据wikipedia。根据您的问题:您 cp1251
【解决方案2】:

让我们澄清一下:CP1250 中有一些字节,并且您知道编码。您希望将它们以字符串形式发送到某个系统,这些字符以 \uXXXX 的形式转义,或者以 UTF-16 的形式作为字节。

首先,遵循 Andreas_D 给出的建议:new String(bytes, "CP1250") 会将您的字节转换为 java 字符串。

现在要在 utf-16 中有一个字节数组,请使用 new String(bytes, "CP1250").getBytes("UTF-16);

要将此字符串作为带有 unicode 字符转义的 ASCII 字符串,请使用 this 示例

【讨论】:

  • 我有从 1 到 99 的数字。我必须将此数字发送到系统,例如 0x81..until..11A (1 = 0x81, 2 = 0x82....99 = 11A)。但在我发送到系统之前,我有将字符串参数转换为十六进制字节的方法。所有参数都用cp1250编码,只有这个数字。首先我得到像 int 1,2,3,4,5...99 和我转换成适当的 char 我的方法会知道从 0x81 上转换成十六进制。
猜你喜欢
  • 2012-12-01
  • 1970-01-01
  • 2014-03-11
  • 2017-08-23
  • 2018-10-05
  • 2021-04-30
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
相关资源
最近更新 更多