我无法解决Java Unicode和编码问题。问题是我有5000多个字符串,如:“Steve O#8217Conord和Mirco Savas”和......“Rusell O&#146Connell”,其中“#8217”和“&#146”必须用撇号代替。
但是这个代码有很多不同的变体,而apache.common.lang.StringUtils
Apache库并没有帮我解决问题,因为库需要“&”开头的char和“;”在末尾。我无法在任何地方输入这些,因为有超过5,000个字符串。因此,如果有任何方法使用正则表达式或其他东西在字符串中找到这些序列并用撇号替换它们,我会很高兴听到它:)
此外,还有一些像“O”这样的符号,它们是一个很大的问题,因为它们应该用UTF8读取。我的意思是(\ u8127)和其他角色。你有什么建议吗?
答案 0 :(得分: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’Connell"};
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
取消它(获取它here),字符串最终被写入文件采用UTF-8格式。
请注意,Java可以配置为自动读取和写入UTF-8文件。 Java应该自动为您的系统使用正确的编码。将文件显式写为特定编码通常是个坏主意,除非你真的知道自己在做什么。