如何将UTF8转换为Unicode

Rob*_*itt 7 java character-encoding

我尝试将UTF8字符串转换为Java Unicode字符串.

String question = request.getParameter("searchWord");
byte[] bytes = question.getBytes();
question = new String(bytes, "UTF-8");
Run Code Online (Sandbox Code Playgroud)

输入是中文字符,当我比较每个字符的十六进制代码时,它是相同的中文字符.所以我很确定charset是UTF8.

我哪里出错了?

Jon*_*eet 11

在Java中没有"UTF-8字符串"这样的东西.一切都是Unicode.

当您在String.getBytes()未指定编码的情况下进行呼叫时,它使用平台默认编码 - 这几乎总是一个坏主意.

你不应该做任何事来在这里找到合适的角色 - 请求应该为你处理.如果它没有这样做,那么很可能它已经丢失了数据.

你能举一个实际出错的例子吗?指定您正在接收的字符串中的字符的Unicode值(例如,通过使用toCharArray()然后将每个字符转换char为a int)以及您希望接收的内容.

编辑:要诊断这个,请使用以下内容:

public static void dumpString(String text) {
    for (int i = 0; i < text.length(); i++) {
        System.out.println(i + ": " + (int) text.charAt(i));
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,这将给出每个Unicode字符的十进制值.如果你有一个方便的十六进制库方法,你可能想用它来给你十六进制值.重点是它会将Unicode字符转储到字符串中.