java处理提交不显示unicode码\u202c\u202d

Unicode的学名是”Universal Multiple-Octet Coded Character Set”,简称为UCS

不可见字符”/u200b”为 Unicode Character ‘ZERO WIDTH SPACE’ (U+200B),可用于内容标识,不占位数。

从Excel中复制过来的数据,在复制的时候复制了多余的东西。于是试了手写是正常,windows有些版本的Excel复制过来就有问题。本地一调试发现,果不其然,正常手写的手机号是11位,但是复制过来的确是多了一个东西,长度变为了12位,多了个'\u202D',问题找到了。

处理方法如下:

package com.yitao.cms.utils;

import org.apache.commons.lang.StringUtils;

/**
 * @Author: wwl
 * @Date: 2020/4/9 16:36
 * @Description:字符处理工具类
 */
public class StringDealUtils {
    /**
     * 处理特殊字符问题
     *
     * @param phone
     * @return
     */
    public static String dealBlankString(String phone) {
        if (StringUtils.isNotBlank(phone)) {
            phone = removeNonAscii(phone);
            phone = removeSomeControlChar(phone);
            phone = removeFullControlChar(phone).trim();
            return phone;
        }
        return null;
    }
    /**
     * 去除非ascii码字符
     *
     * @param str
     * @return
     */
    public static String removeNonAscii(String str) {
        return str.replaceAll("[^\\x00-\\x7F]", "");
    }
    /**
     * 去除不可打印字符
     *
     * @param str
     * @return
     */
    public static String removeNonPrintable(String str) {
        return str.replaceAll("[\\p{C}]", "");
    }

    /**
     * 去除一些控制字符 Control Char
     *
     * @param str
     * @return
     */
    public static String removeSomeControlChar(String str) {
        return str.replaceAll("[\\p{Cntrl}\\p{Cc}\\p{Cf}\\p{Co}\\p{Cn}]", ""); // Some Control Char
    }

    /**
     * 去除一些换行制表符
     *
     * @param str
     * @return
     */
    public static String removeFullControlChar(String str) {
        return removeNonPrintable(str).replaceAll("[\\r\\n\\t]", "");
    }




    public static void main(String[] args) {
        String password1 ="16473328838\u202C";
        String password2 ="16473328838";
        System.out.println("password1:"+password1.length());
        System.out.println("password2:"+password2.length());
        System.out.println("password1:"+ StringDealUtils.dealBlankString(password1).length());
        System.out.println("password2:"+StringDealUtils.dealBlankString(password2).length());
    }
}


 

你可能感兴趣的:(异常处理)