小语种特殊字符

本文介绍了在遇到小语种特殊字符无法存入数据库的问题时,提供了两种解决方案:一是通过转译字符后再存入数据库,二是将数据库字段设置为`nvarcha2`类型以支持UTF8特殊字符。还提到了具体的字符转换方法和示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小语种特殊字符

当遇到html特殊字符需要存入数据库时,数据库不接受。
html特殊字符:https://tool.oschina.net/commons?type=2

方案一:
1 把传入的特殊字符转译

/**
     * 把非中文和非中文的()转换成转译字符
     * @param name
     * @return
     */
    public static String covertSpecialCharToHtml(String name){
        int length = name.length();
        String subName = "";
        boolean matches = false;
        String covertName = "";
        for (int i = 0; i < length; i++) {
            subName = name.substring(i, i+1);
            matches = subName.matches("[\u4e00-\u9fa5()]");// 判断是否是中文和中文括号

            // 中文和中文括号不转译
            if (matches) {
                covertName += subName;
            } else {
                covertName += StringEscapeUtils.escapeHtml(subName);
            }
        }

        return covertName;
    }

2 把转换过得字符存入数据库
3 转译字符转成原字符,调用

StringEscapeUtils.unescapeHtml(corporationNo);

方案二
1 数据库字段类型设置为 nvarcha2 类型
nvarchar支持utf8特殊字符

2 把字符转换

public static String valueToUnicode(String itemValue){
        String unicodeData = "";
        String valueString = "";
        String finalString = "";
        if (!StringUtils.isEmpty(itemValue)) {

            for (int i = 0; i < itemValue.length(); i++) {
                //遍历字符串,获取每一个的16进制
                char c = itemValue.charAt(i);
                unicodeData = Integer.toHexString(c);
                
                //判断当前字符的16进制长度,如果是两位16进制,在前面补上两个0。
                //如果是单引号(等于27),需要转义,否则sql语句解释失败
                if (unicodeData.length() == 2) {
                    if (unicodeData.equals("27")) {
                        valueString += "''";
                    }else{
                        valueString += "\\00" + unicodeData;
                    }
                } else if(unicodeData.length() == 3) {
                    valueString += "\\0" + unicodeData;
                }else{
                    //正常的四位16进制长度,直接拼街上
                    valueString +="\\" + unicodeData + "";
                }
            }
            
            //使用unistr函数拼接sql语句
            finalString = "unistr('" + valueString + "')";
        } else {
            //如果为空,使用null
            finalString = "null";
        }
        return finalString;
    }

调用方法之后,
valueToUnicode(“fdafds”);
返回
unistr(’\0066\0064\0061\0066\0064\0073’) ,
把返回值拼接到sql中,
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值