簡體   English   中英

如何去除 Unicode 十進制值 Unicode Java 中的字符串中的雜項符號

[英]How to remove Unicode decimal values of Unicode miscellaneous Symbols in String in Java

我正在刪除或替換 web 應用程序的文本區域字段中使用的字符串(Java 中)中的雜項符號。發生的情況是,當我使用以下內容時,內容正在轉換為 unicode 十進制表示值.

內容為: String a = 'Last Search Results Bulletin Board Validations ⛔ 0 ⚡ 1 ⚠ 6? 0'

當我將該內容保存在文本區域(即在 web 頁面中)時,該符號被保存為 ⛔,⚡,⚠。

我想刪除 unicode 表示值(或)以正確的格式保存內容,以便我可以將正確的數據保存到數據庫中。

如何從字符串中刪除符號('⛔'或'⚡'或'⚠')的 unicode 表示值? 實際上,我嘗試使用正則表達式來替換下面 s.replaceAll("&#[9728 - 9983];", "") 中的那些表示。 范圍 [9728 - 9983] 表示雜項符號 unicode 十進制值范圍。但它沒有正確替換它。 我可以使用哪個正則表達式? 或者可以使用哪種方法來刪除字符串中的值?

(或者)

如何將 unicode 表示值('⛔' or '⚡' or '⚠')再次轉換為字符串中的相同符號(⛔,⚡,⚠)?

我在庫存 Java 中沒有找到這樣的實用程序。 你只需要以“硬”的方式去做。

請注意,這不包括十六進制等效項(例如 ⛔)或長度不等於 4 的十進制值。

public static String htmlCharsDecode(String string) {
    int           length = string.length();
    StringBuilder out    = new StringBuilder(length);

    NumberFormat  parser = NumberFormat.getInstance();
    ParsePosition pos       = new ParsePosition(0);

    for (int i = 0; i < length; i++) {
        char c = string.charAt(i);

        if (c == '&' && i < length - 6 && string.charAt(i + 1) == '#' && string.charAt(i + 6) == ';') {
            String codepointString = string.substring(i + 2, i + 6);

            pos.setIndex(0);
            Number value = parser.parse(codepointString, pos);

            boolean isDecimal = pos.getIndex() == codepointString.length();
            if (isDecimal) {
                int codepoint = value.intValue();
                if (codepoint >= 9728 && codepoint <= 9999) {
                    out.append((char)codepoint);
                    i += 6;
                    continue;
                }
            }
        }

        out.append(c);
    }

    return out.toString();
}

您可以將parserpos設為全局以防止在每次調用時創建新對象,但要注意它們不是線程安全的。 (而且過早優化也不好)

你需要在UTF-8中渲染頁面,並在表單數據中說服務器接受UTF-8。 (否則發送&#...;實體而不是 Unicode 符號。)

<form action="..." accept-charset="ISO-8859-1">

在 HTML 5 中:

<meta charset="UTF-8">

舊版 HTML:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

也應該相應地設置響應 header :

Content-Type: text/html; charset=UTF-8

response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");

有一些庫可以取消轉義 HTML 實體,例如 JSoup Parser.unescapeEntities()方法。

如果您想簡單地刪除表情符號,請查看使用白名單過濾器方法的這個答案

String input = "Last Validations ⛔ 0 ⚡ 1 ⚠ 6 ? 0";
String characterFilter = "[^\\p{L}\\p{M}\\p{N}\\p{P}\\p{Z}\\p{Cf}\\p{Cs}\\s]";
String emotionless = input.replaceAll(characterFilter,""); 
System.out.println(emotionless); // Last Validations  0  1  6 ? 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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