最强特殊字符、表情符号、Unicdeo字符串处理

最强特殊字符、表情符号、Unicdeo字符串处理

处理效果:

将特殊字符、表情符号 替换成空格

Unicode编码字符串 转义

重音字符原样保留

    /**
     * @param: str
     * @description: 处理可能包含unicode的字符串
     * 如"?\u0006 \u0000\u0019\u0000\"" 这样含有这样错误的unicode的字符串是可以存入数据库,并导致乱码。
     * 入参 ?\u0006 \u0000\u0019\u0000\"  返回结果?\\u0006 \\u0000\\u0019\\u0000\\\"
     * n\u0005\ufffd\u0000 n\u0007\u0005\u0019w\u0000
     * aaasadf,sdfn�  nw 你好111xiekai@#$,.ẨẩẪẫẬậ
     * "123@#$,._-!@#$%^&*()+-AQÀÁÂÃÈÉÊÌÍÐÑÒÓÔÕÙÚÝàáâãåèéêìíñòóôõùúüýĂăĐđĨĩŨũūƠơƯự̀́̃̉ẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẸẹẺẻẼẽẾếỀềỂểỄễỆệỈỉỊịỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợỤụỦủỨứỪừỬửỮữỰựỲỳỴỵỶỷỸỹ₫ạ𝑴𝒆𝒈𝒂𝒓𝒊𝒂dzaki   ẨẩẪẫẬậ \u0005\ufffd\u0000 n\u0007\u0005\u0019w\u0000你好111 ramatullah\uD83D\uDE0Edzaki ramatullah😎";
     * @return: java.lang.String
     * @author: xk
     * @date: 2021/4/20 19:24
     */
    public static String handleUnicodeStr(String str) {
        if (str == null) {
            return null;
        }
        try {
            str = str.replaceAll("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]", " ");//emoji表情、特殊字体替换空格
            String backStr = replaceUnicode(str);
            return backStr;
        } catch (Exception e) {
            log.error("handleUnicodeStr get exception", e);
            return str;
        }

    }


    /**
     * @param: sourceStr
     * @description: 将unicode的字符转义
     * @return: java.lang.String
     * @author: xk
     * @date: 2021/5/11 14:26
     */
    public static String replaceUnicode(String sourceStr) {
        StringBuffer stringBuffer = new StringBuffer();
        //[\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Lm}\p{Nd}\p{Pc}]对应 [0-9a-zA-Z_]  {P}任何类型的标点符号。 {M}重音符号,变音符号,封闭框等  p{Sc}任何货币符号。
        Pattern pattern = Pattern.compile("[^\\p{Ll}\\p{Lu}\\p{Lt}\\p{Lo}\\p{Lm}\\p{Nd}\\p{Pc}\\p{P}\\p{M}\\p{Sc}]");
        Matcher matcher = pattern.matcher(sourceStr);
        while (matcher.find()) {
            matcher.appendReplacement(stringBuffer, java.util.regex.Matcher.quoteReplacement((StringEscapeUtils.escapeJava(matcher.group()))));
        }
        matcher.appendTail(stringBuffer);
        return stringBuffer.toString();
    }

知识点

a.通过Unicode来匹配字符,从而做到通用

参考:https://www.regular-expressions.info/unicode.html

b.StringEscapeUtils.escapeJava 转义Unicode。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值