enter code here
我遇到了html编码问题。
我有一个带有html编码的字符串,如下所示:
Ðột nhiên, ở gốc Tây Bắc văng vẳng có tiếng vó ngựa dồn dập.
我想将此String转换为Unicode。 其输出(实际值)应为
Ðột nhiên, ở gốc Tây Bắc văng vẳng có tiếng vó ngựa dồn dập.
我试图找到解决方案为this sugest,但它只对字符串有帮助,所有字符的格式都以&#
开头。字符以&xxxx
开头,由此page我得到的编码是html编码,但我的输入字符串是转换HTML实体(命名)和HTML实体(十进制)的组合。
任何人都可以给我一个建议吗? 如果你能在java中没有任何额外的库来解决它,那就是最好的。
提前感谢!
[更新] 我使用Apache library解决了我的问题:
String encodeString = "Ðột nhiên, ở gốc Tây Bắc văng vẳng có tiếng vó ngựa dồn dập.";
String unEncodeString = StringEscapeUtils.unescapeHtml4(encodeString);
System.out.println("OUTPUT : " + unEncodeString);
=====> OUTPUT : Ðột nhiên, ở gốc Tây Bắc văng vẳng có tiếng vó ngựa dồn dập.
答案 0 :(得分:0)
maven:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.9.2</version>
</dependency>
/**
* https://stackoverflow.com/a/6766497/8356718
*/
public static String toDecimal(String text) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < text.length(); i++) {
int codePoint = text.codePointAt(i);
// Skip over the second char in a surrogate pair
if (codePoint > 0xffff) {
i++;
}
sb.append(String.format("&#%s;", codePoint));
}
return sb.toString();
}
public static Document getNoPrettyDoc(String html) {
Document doc = Jsoup.parse(html);
doc.outputSettings().prettyPrint(false);
return doc;
}
public static String toDecimalHtml(String html) {
Document doc = getNoPrettyDoc(html);
toDecimalHtml(doc);
return doc.body().html().trim().replace("&", "&");
}
private static void toDecimalHtml(Node node) {
for (int i = 0; i < node.childNodes().size(); ) {
Node child = node.childNode(i);
if (child.nodeName().equals("#text")) {
TextNode text = (TextNode) child;
String str = text.getWholeText();
text.text(toDecimal(str));
if (child.childNodes().size() <= 0) {
i++;
}
} else {
if (child.childNodes().size() > 0) {
toDecimalHtml(child);
}
i++;
}
}
}
您可能需要首先删除\n \r \t
答案 1 :(得分:0)
使用Apache Commons StringEscapeUtils.unescapeHtml(string)
进行此操作。
答案 2 :(得分:0)
您可能需要尝试进行编码和解码。
用于编码
URLEncoder.encode("<#> Test", "UTF-8").replace("+", "%20");
用于解码
URLDecoder.decode("%3C%23%3E%20Test");
答案 3 :(得分:-2)
在Java中,对于unicode字符串文字,在数字前面\u
。
例如:
System.out.println("\u0042");
System.out.println("\u00AF\\_(\u30C4)_/\u00AF");
打印:
B
¯\_(ツ)_/¯
你想要的是:
System.out.println("\u00D0\u1ED9t nhi\u00EAn, \u1EDF g\u1ED1c T\u00E2y B\u1EAFc v\u0103ng v\u1EB3ng c\u00F3 ti\u1EBFng v\u00F3 ng\u1EF1a d\u1ED3n d\u1EADp.\n");
打印:
Ðột nhiên, ở gốc Tây Bắc văng vẳng có tiếng vó ngựa dồn dập.
编辑:Apache commons是最好的方式: