[英]How to unescape html special characters in Java?
我需要處理一些文本字符串,並且在字符串中有HTML特殊字符。 例如:
10����������������10������������������
我想將這些字符轉換為utf-8。
我使用了org.apache.commons.lang3.StringEscapeUtils.unescapeHtml4,但是沒有運氣。 有沒有簡單的方法來解決這個問題?
Apache commons-lang庫具有StringEscapeUtils
類,該類具有unescapeHtml()
實用程序方法。
String utf8Str = StringEscapeUtils.unescapeHtml(htmlStr);
您可能還需要unescapeXml()
@Bohemian的代碼正確,對我有用,您的未編碼字符串是10😭😭😂😂😂😂😢😂10😭😭😂😂😂😂😢😂😂。
現在,我要添加另一個答案,而不是對Bohemian的答案發表評論,因為還有兩件事需要提及:
我將您的字符串復制粘貼到HTML代碼中,並且瀏覽器無法正確呈現您的字符,因為您的字符串編碼不正確,即,該字符串已分別為兩個字節的字符編碼了高替代字符和低替代字符,而不是編碼整個代碼點(似乎原始字符串是UTF-16編碼的字符串,也許是Java字符串?)。
您希望將字符串重新編碼為UTF-8。
一旦您的String被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);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.