我有一些我需要处理的文本字符串,在字符串中有HTML特殊字符。例如:
10����������������10������������������
我想将这些字符转换为utf-8。
我使用了org.apache.commons.lang3.StringEscapeUtils.unescapeHtml4,但没有任何运气。有没有一种简单的方法可以解决这个问题?
答案 0 :(得分:3)
Apache commons-lang库具有StringEscapeUtils
类,其具有unescapeHtml()
实用程序方法。
String utf8Str = StringEscapeUtils.unescapeHtml(htmlStr);
您可能还需要unescapeXml()
答案 1 :(得分:0)
@Bohemian的代码是正确的,它适用于我,你的未编码字符串是1010。
现在,我正在添加另一个答案而不是评论波希米亚人的答案,因为还有两件事需要提及:
我将您的字符串复制粘贴到HTML代码中,浏览器无法正确呈现您的字符,因为您的字符串编码不正确,i。即字符串分别编码高代理和低代码用于两个字节的字符,而不是编码整个代码点(似乎原始字符串是UTF-16编码的字符串,可能是Java字符串?)。
您希望将字符串重新编码为UTF-8。
一旦你的字符串未被StringEscapeUtils.unescapeHtml(htmlStr)
解码(尽管编码错误,它成功地解码了你的字符串),但由于java字符串“不知道”关于“字符串编码”,所以没有多少意义编码。 (他们虽然在内部使用UTF-16。)
如果需要一组包含UTF-8编码“字符串”的字节,则需要从编码为UTF-8的字符串中获取“原始”字节:
String javaStr = StringEscapeUtils.unescapeHtml(htmlStr);
byte[] rawUft8String = javaStr.getBytes("UTF-8");
无论你需要什么,都可以使用这样的字节数组。
现在,如果您需要将UTF-8编码的字符串写入File,而不是该字节数组,则需要在创建正确的java.io.Writer
时指定编码。
尝试使用此代码对字符串进行解码(首先更改文件路径),然后在支持UTF-8的任何编辑器中打开生成的文件:
java.io.Writer方法(更好):
public static void main(String[] args) throws IOException {
String str = "10����������������10������������������";
String javaString = StringEscapeUtils.unescapeHtml(str);
try(Writer output = new OutputStreamWriter(
new FileOutputStream("/path/to/testing.txt"), "UTF-8")) {
output.write(javaString);
}
}
java.io.OutputStream方法(如果您已经有“原始字符串”):
public static void main(String[] args) throws IOException {
String str = "10����������������10������������������";
String javaString = StringEscapeUtils.unescapeHtml(str);
try(OutputStream output = new FileOutputStream("/path/to/testing.txt")) {
for (byte b : javaString.getBytes(Charset.forName("UTF-8"))) {
output.write(b);
}
}
}