如果我从文件中读取,如何将 ASCII(Unicode Escaped)中的字符串转换为 Unicode(UTF-8)?
How can I convert a String in ASCII(Unicode Escaped) to Unicode(UTF-8) if I am reading from a file?
编辑:
我正在从文件中读取该字符串,因此本主题实际上是关于以下问题:
我有这个字符串,它 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"))
但没有任何效果...!
接下来我可以尝试什么?
谢谢!
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";
你会得到相同的结果。
我让它为我工作的方式,从一个明确写入转义 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"
编辑:
我正在从文件中读取该字符串,因此本主题实际上是关于以下问题:
我有这个字符串,它 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"))
但没有任何效果...!
接下来我可以尝试什么?
谢谢!
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";
你会得到相同的结果。
我让它为我工作的方式,从一个明确写入转义 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"