首页 > 其他分享 >对non-bpm生僻字的处理

对non-bpm生僻字的处理

时间:2024-05-16 15:43:35浏览次数:13  
标签:origin count non x93 生僻字 StringBuilder bpm sb

1,问题

有一个接口返回的字符串中有生僻字,但是mysql表用的字符集是utf8 即 utf8mb3,报错是

### Cause: java.sql.SQLException: Incorrect string value: '\xF0\xA8\xBA\x93\xE7\x94...' for column 'response_json' at row 1
; uncategorized SQLException; SQL state [HY000]; error code [1366]; Incorrect string value: '\xF0\xA8\xBA\x93\xE7\x94...' for column 'response_json' at row 1; nested exception is java.sql.SQLException: Incorrect string value: '\xF0\xA8\xBA\x93\xE7\x94...' for column 'response_json' at row 1]

2,解决

两种解决方法,一种是将表字段的字符集改为utf8-mb4,另一种是将字符中的生僻字转为unicode,第一种方法会影响后续业务,所以采用第二种

参考文章有:MySQL 5.7 版本的 UTF8 字符集调研 , Java Unicode编码 及 Mysql utf8 utf8mb3 utf8mb4 的区别与utf8mb4的过滤

代码如下:

    private String covertNonBmpString(String input){
        StringBuilder origin = new StringBuilder(input);
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < origin.length(); ) {
            int count = Character.charCount(origin.codePointAt(i));
            if (count > 1) {
                for (int j = 0; j < count; j++) {
                    String hex = Integer.toHexString(origin.charAt(i + j));
                    sb.append("\\u").append(hex);
                }
            } else {
                sb.append(origin.charAt(i));
            }
            i += count;
        }
        return sb.toString();
    }

 

标签:origin,count,non,x93,生僻字,StringBuilder,bpm,sb
From: https://www.cnblogs.com/hsql/p/18196053

相关文章

  • 生僻字轻松输入
    阅读全文:https://itxiaozhang.com/easy-input-for-rare-characters/此教程配合视频学习效果最佳,视频教程在文章末尾。微软输入法是Windows操作系统内置的中文输入工具,提供全拼、双拼、笔画和英文输入方式,以及特殊输入模式如V模式和U模式,支持数字、日期、公式和特殊字符输入。......
  • CF1967D Long Way to be Non-decreasing 题解
    CF1967DLongWaytobeNon-decreasing题解知识点二分答案,基环树。题意分析给定一个包含\(n\)个元素的数组\(\{a_i\}\)和一个\(m\)个元素的数组\(\{b_i\}\)。定义每次操作为:在\(\{a_i\}\)中选择任意个数,假设某个选的数为\(a_i\),那么将其变为\(b_{a_i}\)......
  • mysql使用group by查询报错SELECT list is not in GROUP BY clause and contains nona
    官方解释:ONLY_FULL_GROUP_BY是MySQL数据库提供的一个sql_mode,通过这个sql_mode来保证,SQL语句“分组求最值”合法性的检查.这种模式采用了与Oracle、DB2等数据库的处理方式。即不允许selecttargetlist中出现语义不明确的列.对于用到GROUPBY的select语句,查出......
  • 生僻字显示?的字符乱码解决
    现存储生僻汉字时,存为了?,分析后是varchar字段字符集不支持Unicode,使用的简体中文字符集。现改为nvarcahr类型即可。当需要存储生僻汉字时,使用nvarchar类型,该类型会存储Unicode字符数据的整个范围。而varchar仅会存储该排序规则的相应代码页支持的字符子集(当排序不是UTF-......
  • ubuntu22 python2 pyinstaller 打包报错:'NoneType' object has no attribute 'groups'
    前言最近有个需求,需要在ubnutu22上使用pyinstaller打包一个python2的文件。中间遇到了一些问题:pip2installpyinstaller报错解决方案:pip2installpyinstaller==3.6python2和python3的pyinstaller如何同时存在,我想把python2的pyinstaller命名为pyin......
  • TextClip构造方法报OSError:MoviePy creation of None failed because of the followi
    在使用moviepy的构造方法创建实例时报错:这可能是两个原因导致的:未安装ImageMagick应用ImageMagick是一套功能强大、稳定而且开源的多平台工具集和开发包,可以用来读、写和处理超过200种基本格式的图片文件,包括PNG,JPEG,GIF,HEIC,TIFF,DPX,EXR,WebP,Postscript,PDF和SVG等格式。利用ImageM......
  • CodeForces 1967D Long Way to be Non-decreasing 题解
    题意简述yzh喜欢单调不降序列。她有一个序列\(a\),最初为\(a_1,\ldots,a_n\),其中每个元素都在\([1,m]\)内。她希望使序列变得单调不降,为此,她有一个序列$b_1\ldotsb_m$,每个元素也在\([1,m]\)内。她可以进行若干次操作,一次操作定义为:选择一个集合\(S\subseteq......
  • docker网络配置:bridge模式、host模式、container模式、none模式
    在docker平台里有四种网络模式,今天继续分享一下它们的常用知识,进一步加深对docker技术的理解。1、docker网络模式分类dockerrun创建Docker容器时,可以用--net选项指定容器的网络模式,Docker主要有以下4种网络模式。bridge模式:--net=bridge如果不指定的话默认设置。host模式......
  • A. Anonymous Informant
    题面:链接:https://codeforces.com/problemset/problem/1893/A洛谷链接:https://www.luogu.com.cn/problem/CF1893A思路:逆着推有一个非常重要的结论得观察出来:所以当倒过来推的时候(b->a),同理可以直接取b的最后一个:拿b[x]的值往前跳,跳到的指针就是原来a的最后一个所以不用dfs,......
  • HarmonyOS中实现 非可重入锁 NonReentrantLock
    背景在多线程编程中,确保资源的互斥访问是至关重要的。允许并行执行,但需要同步机制来避免数据竞争和竞态条件。锁的重要性锁是一种同步机制,用于控制对共享资源的访问。在ArkTs中,传统的锁实现依赖于语言级别的原子操作,但随着共享内存的引入,我们需要一种新的同步机制。使用Shared......