【问题标题】:Java int array to StringBuilderJava int 数组到 StringBuilder
【发布时间】:2023-03-23 07:54:01
【问题描述】:

如何在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);

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

【问题讨论】:

  • 你能显示整个缓冲区的数据吗?
  • +1 用于获取问题中的 weird 符号.. :)

标签: java arrays integer stringbuilder


【解决方案1】:

首先将 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");

【讨论】:

  • int 是否包含 1 个字节而不是 4 个?
  • 从您(诚然很小)选择的示例值中,您看起来像是在处理一个
  • utf8bytes[0] = (byte)(intArray[i] >>> 24); utf8bytes[1] = (byte)(intArray[i] >>> 16); utf8bytes[2] = (byte)(intArray[i] >>> 8); utf8bytes[3] = (byte)intArray[i];在每个拉丁字符后添加 3 个空格字符。在每个西里尔字符后添加 2 个空格字符。
【解决方案2】:

You are reading in a GIF89a file 为每个字节一个整数,然后将其打印为文本字符串。主要问题是该文件中的整数(字节)实际上并未映射到有意义的文本字符,因此如果映射无法呈现字母表的某些部分,它将呈现您的文本编码指示的任何内容(在我看来很多垃圾)。

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

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

【讨论】:

  • 不,这只是一个例子,该程序不是为读取文件而设计的。该程序将使用俄语和亚洲语言的短信
猜你喜欢
  • 1970-01-01
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 2016-02-12
  • 2010-11-27
  • 2014-07-08
  • 1970-01-01
相关资源
最近更新 更多