【问题标题】:Get raw byte-array from string [duplicate]从字符串中获取原始字节数组[重复]
【发布时间】:2017-01-12 12:29:42
【问题描述】:

我的问题是,是否有任何捷径可以使用标准 java-library-functions 将字符串转换为字节数组? “字符串”确实有NO ENCODING,字符串本身就是一个字符串,但这是我得到它的方式。我自己没有编写代码,我无法更改它,但我必须处理它。标准的String.getBytes() 将不起作用,因为某些值总是得到“?”-ed 并且使底层二进制数据明显无用。

有什么想法吗?

这与这里的问题基本相同:How do I get a consistent byte representation of strings in C# without manually specifying an encoding? 但不是用于 Java 的 C#。我搜索了很长时间,但找不到任何合适的解决方案。

提前致谢。

【问题讨论】:

  • 如果您可以显示您正在处理的字符串,那么我们可能会提供帮助。此外,如果它没有编码,为什么会输出一些字节。你在什么操作系统上运行?
  • 请分享一个给出'?'的字符串转换时。很可能是字符编码的问题,请尝试使用 'UTF-8'
  • 不可能“给出一个字符串”来生成一个“?”......转换为 0x3F(“?”)的典型十六进制值是 0x8E 或 0x8F 以及其他不是几乎任何字符集中的可打印字符(未使用或控制字符)

标签: java arrays string


【解决方案1】:

在 Java 中,String 是 char 数组的包装器,也不是 byte。此外,字符串是不可变的,因此不允许直接访问底层的char[]。

最接近直接访问的是:

  • 复制 char 数组
char[] toCharArray() 

将此字符串转换为新的字符数组。

和

  • 获取索引处的字符
char charAt(int index)

返回指定索引处的字符值。

【讨论】:

    【解决方案2】:

    不幸的是,Java 中没有“String without encoding”之类的东西。正如documentation 所说:

    String 表示 UTF-16 格式的字符串

    因此,当您以String 形式获取数据时,它已经被编码并且无法绕过它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多