簡體   English   中英

如何在Java中對html特殊字符進行轉義?

[英]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的答案發表評論,因為還有兩件事需要提及:

  1. 我將您的字符串復制粘貼到HTML代碼中,並且瀏覽器無法正確呈現您的字符,因為您的字符串編碼不正確,即,該字符串已分別為兩個字節的字符編碼了高替代字符和低替代字符,而不是編碼整個代碼點(似乎原始字符串是UTF-16編碼的字符串,也許是Java字符串?)。

  2. 您希望將字符串重新編碼為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM