5

如何在while循环中将带有UTF-8字符串的int数组转换为StringBuilder?例如:
int 数组:71, 73, 70, 56, 57, 97, 149, 0, 55, 0, 247...
结果字符串: GIF89a• €÷€ € €ÀÜÀ¦Êð*?ª*?ÿ ...
该行包含拉丁文、西里尔文和亚洲字符,以及各种符号和数字

do buffer.append((char)num[++i]);
while((byte)buffer.charAt(buffer.length()-1) != -1);

此方法分解所有非拉丁字符。

4

2 回答 2

3

首先将 int[] 转换为 byte[] 如下:

    //intArray contains your data...
    byte[] utf8bytes = new byte[intArray.length];
    for(int i = 0; i < intArray.length; i++)
    {
        utf8bytes[i] = (byte) intArray[i];
    }

然后从您的字节创建一个字符串,指定 UTF-8 作为编码:

    String asString = new String(utf8bytes, "UTF-8");
于 2012-06-07T20:35:55.460 回答
0

您正在读取一个 GIF89a 文件作为每个字节一个整数,然后将其打印出来,就像它是一个文本字符串一样。主要问题是该文件中的整数(字节)实际上并未映射到有意义的文本字符,因此在映射无法呈现部分字母表的情况下,它将呈现您的文本编码要求的任何内容(在我看来很多垃圾)。

图形信息并不总是清晰地映射到文本。虽然有 256 个可能的字节值,有时一个或多个字节将代表一个字符,但英文字母表中只有 26 个字母,它们以大写和小写形式表示。除了十位数字和少量标点符号外,您还可以获得大约 80 个不同的字符,这些字符在一篇文章中很常用。剩下的 160 多个字符是控制代码、使用多字节的信号或映射到存在的字符以支持外语的显示。

该垃圾是最接近当前字符集的有效字节到字符映射的东西。如果您想要更好的输出,请尝试读取包含映射到与字符相关的数据的文件。

于 2012-06-07T20:31:23.197 回答