java - 将字节数组转换为可理解的字符串

标签 java unicode ascii hash

我有一个用 Java 处理字节数组的程序,现在我想将它写入一个 XML 文件。但是,我不确定如何将以下字节数组转换为合理的字符串以写入文件。假设它是 Unicode 字符,我尝试了以下代码:

String temp = new String(encodedBytes, "UTF-8");

仅让调试器显示编码字节包含 "\ufffd\ufffd ^\ufffd\ufffd-m\ufffd\ufffd\/ufffd\ufffd\ufffdIA\ufffd\ufffd"。字符串应包含字母数字格式的散列。

我如何将上面的字符串变成一个合理的输出字符串?

最佳答案

字节数组看起来不像 UTF-8。请注意,\ufffd(名为 REPLACEMENT CHARACTER)是 "used to replace an incoming character whose value is unknown or unrepresentable in Unicode."

附录:这里有一个简单的例子来说明这是如何发生的。当转换为 byte 时,ñ 的代码点既不是 UTF-8 也不是 US-ASCII;但它有效的 ISO-8859-1。实际上,在将字节编码为 String 之前,您必须知道字节代表什么。

public class Hello {

    public static void main(String[] args)
            throws java.io.UnsupportedEncodingException {
        String s = "Hola, señor!";
        System.out.println(s);
        byte[] b = new byte[s.length()];
        for (int i = 0; i < b.length; i++) {
            int cp = s.codePointAt(i);
            b[i] = (byte) cp;
            System.out.print((byte) cp + " ");
        }
        System.out.println();
        System.out.println(new String(b, "UTF-8"));
        System.out.println(new String(b, "US-ASCII"));
        System.out.println(new String(b, "ISO-8859-1"));
    }
}

输出:

Hola, señor!
72 111 108 97 44 32 115 101 -15 111 114 33 
Hola, se�or!
Hola, se�or!
Hola, señor!

关于java - 将字节数组转换为可理解的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2654145/

相关文章:

java - 在 jackson 中禁用数字到字符串的自动转换

Java ME 部署 midlet

java - 整数循环到希腊字符 - Java

c# - 是否有可能写入或打印到控制台

Java 十六进制、字符、数字之间的转换

java - Jmeter单线程组中的多个并发用户

java - 为什么android(6.0)系统在深度 sleep 约1小时后禁止网络连接

c# - 使用 REST 和 C# 实现 Google transliterate API,面临 unicode 和解析问题

android - Android 中的 Unicode

arrays - 将 unicode 代码点数组转换为字符串