0

我一直无法解决 Java Unicode 和编码的问题。问题是我有 5,000 多个字符串,例如:“Steve O#8217Conord and Mirco Savas”和...“Rusell O’Connell”,其中“#8217”和“’”必须用撇号替换。

但是此代码有许多不同的变体,apache.common.lang.StringUtilsApache 库并没有帮助我解决问题,因为该库需要以“&”字符开头和“;” 在末尾。我不能到处输入这些,因为有超过 5,000 个字符串。因此,如果有任何方法使用正则表达式或其他方法在字符串中找到这些序列并用撇号替换它们,我会很高兴听到它:)

此外,还有一些像“O’”这样的符号,它们是一个大问题,因为它们应该以 UTF8 格式读取。我的意思是像 (\u8127) 和其他字符。你有什么建议吗?

4

1 回答 1

0

尝试这样的事情:

import java.io.FileOutputStream;
import java.io.PrintWriter;
import org.apache.commons.lang3.StringEscapeUtils;

String[] myStringPool = {"Steve O#8217Conord and Mirco Savas","Rusell O&#146Connell"};
PrintWriter pw = new PrintWriter("utf-8.txt", "UTF-8");
for(String string : myStringPool) {
    pw.println(StringEscapeUtils.unescapeXml(string.replaceAll("&?#(\\d+);?", "&#$1;")));
}
pw.close();

假设您已经有这些字符串可访问,string.replaceAll("&?#(\\d+);?", "&#$1;")清理字符串中的 XML 实体,以便通过org.apache.commons.lang3.StringEscapeUtils在此处获取)进行转义,这些字符串最终以 UTF-8 格式写入文件。

请注意,Java 可以配置为以 UTF-8 格式自动读取和写入文件。Java 应该自动为您的系统使用正确的编码。除非您真的知道自己在做什么,否则将文件显式写入特定编码通常是一个坏主意。

于 2012-11-20T22:23:04.247 回答