提问者:小点点

如果我正在读取文件,如何将ASCII(Unicode转义)中的字符串转换为Unicode(UTF-8)?


编辑:

我正在从文件中读取该字符串,因此本主题实际上是关于以下问题的:

我有这个字符串,它等于从文件中收到的字符串():

"Diogo Pi\\u00e7arra - Tu E Eu"

如何使Java将结果字符串“ç”读取为“ç”字符?

发生这种情况是因为文件不是在UTF-8中编码的,而是在转义的Unicode中编码的,因此我将“ç”读取为字符串而不是Unicode字符的原因。所以我需要一个在运行时解析它的函数。我可以遍历。替换()函数来解析这个,但是……

老问题(在我明白发生了什么之前以错误的方式提问,请忽略以下文本):

我有以下字符串:

final String str = "Diogo Pi\u00e7arra - Tu E Eu";

我想将其转换为:

"Diogo Piçarra - Tu E Eu"

我已经尝试了所有方法,从Apache Long工具un逃逸功能,到

new String(str.getBytes("UTF-16"), "UTF-16")

new String(str.getBytes("UTF-8"), "UTF-8")

new String(str.getBytes("UTF-16"))

new String(str.getBytes("UTF-8"))

但是什么都没用…!

接下来我可以尝试什么?

谢谢!


共2个答案

匿名用户

我让它为我工作的方式,从显式写入转义unicode的文件中读取:

    BufferedReader reader1 = new BufferedReader(new InputStreamReader(file.getInputStream()));
    byte c;
    while ((c = (byte) reader1.read()) != -1) {
        output.append(new String(new byte[] { c }, "UTF-8"));
    }
    return StringEscapeUtils.unescapeJava(output.toString());

这行得通是因为

StringEscapeUtils.unescapeJava("Diogo Pi\\u00e7arra - Tu E Eu")
results in "Diogo Piçarra - Tu E Eu"

匿名用户

final String str = new String("Diogo Pi\u00e7arra - Tu E Eu".getBytes(), 
                              Charset.forName("UTF-8"));

结果:

尝试使用不带参数的getBytes()方法(这里将使用defaultCharset)。但这不是必需的。不需要转换:

final String str = "Diogo Pi\u00e7arra - Tu E Eu";

你会有同样的结果。