【问题标题】:convert A Byte to ASII char in java在java中将一个字节转换为ASCII字符
【发布时间】:2015-08-20 08:25:03
【问题描述】:

我有一个字节数组,数组中的每个字节对应一个 ASII 字符(8 位 ASCII 字符)。我正在尝试从列表中获取整个 ASII 字符列表。

byte[] data;

ArrayList<Character> qualAr = new ArrayList<>();
for (int i = 0; i < data.length; i++) {
    qualAr.add((char)data[i]);
}

上述方法没有正确打印所有ASCII字符,因为打印的许多字符包含方框和空格。如果问题不是设置编码,那么如何将编码类型设置为ASCII上面的方法?我看到的大多数例子都是 UTF-8。

更新:谢谢大家。问题不在于编码。我找到了新的文档,说明值需要使用 - ASCII+33 进行转换,如果没有,这些值会尝试打印初始 ASCII 字符,这没有任何意义。

【问题讨论】:

  • 我认为您不能像上面那样简单地将每个 byte 转换为 char
  • 没有 8 位 ASCII 这样的东西。你的数据是什么编码的?
  • 数据类型为 ASCII,描述为 8 位 ASCII 字符

标签: java character-encoding char bytearray


【解决方案1】:

尝试使用以下代码:

String dataConverted = new String(data, "UTF-8");
ArrayList<Character> qualAr = new ArrayList<>();
for (char c : dataConverted.toCharArray()) {
    qualAr.add(c);
}

我将您的字节数组转换为字符串,然后生成字符列表。 ASCII 字符应在 UTF-8 中表示为一个字节码。

请记住,前 32 个左右的 ASCII 字符可能会呈现为方框或空格。

Here is a link 到基本 ASCII 表。

【讨论】:

  • 是的,前几个字符和后几个字符中都有方框/空格。正常吗?字节数组包含的元素数量已经给出,并且由于空间和框的原因,从字节数组解码的字符数不相等。这是否意味着编码没有正确完成?
  • 你的dataqualArArrayList的长度怎么会不一样呢?如果您向我们提供有关您的输入数据的更多信息,也许我们可以澄清您的问题。无论如何,我的代码应该可以工作如果你真的只有 ASCII 字符。
  • qualAr的长度和data是一样的。但是 qualar 应该只填充 ASII 字符而不是框或空格。我拥有的数据是 AB1 文件格式(由测序仪使用)。这个特定 char 数组的描述提到它包含 -8 位 ASCII 字符或有符号 8 位整数。
  • @TimBiegeleisen 您链接到的网站将 Windows-1252 称为“扩展 ASCII”。请不要链接到事实上不正确的来源。
  • @KarolS 我在对基本 ASCII 表的回答中提供了一个链接,感谢您指出这一点。
猜你喜欢
  • 2011-10-19
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-25
相关资源
最近更新 更多