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

时间:2015-08-04 20:02:31

标签: java unicode encoding utf-8 escaping

修改

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

我有一个字符串,它是从文件中收到的 equal()

"Diogo Pi\\u00e7arra - Tu E Eu"

如何让Java将结果字符串“\ u00e7”作为“ç”字符读取?

这是因为文件不是以UTF-8编码,而是以转义的Unicode编码,因此我将“\ u00e7”作为字符串而不是Unicode字符进行读取。所以我需要一个在运行时解析它的函数。我可以迭代.replace()函数来解析这个......但是......

旧问题(在我理解发生了什么之前以错误的方式询问,请忽略以下文字):

我有以下字符串:

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

我希望将其转换为:

"Diogo Piçarra - Tu E Eu"

我已尝试过所有内容,从Apache Lang工具unescape函数到

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 个答案:

答案 0 :(得分:4)

我让它为我工作的方式,从一个明确写有转义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"

答案 1 :(得分:0)

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";

你会得到同样的结果。