数据库中的一行数据,现在要处理这个数据,该如何判断其中有么有中文呢?
也想过把数据从数据库取出来在应用程序中判断,不晓得该如何写判断??
严格点是判断编码范围
更简便的方法是利用utf8编码里中文的LENGTH()和CHAR_LENGTH()结果不一样来做
当然如果你这个字段可能是其他也是占用多个字节的语言,那就不那么好用了。
严格的都是需要判断字符串中各个字符所在编码范围,但这有一个前提,是字符串有合适的格式,即合适的编码
数据库本身是可以指定存储数据编码的,当前一般选用unicode编码,不过一些数控原始存储字符串编码不一定和这个编码兼容,就存在一个标准化编码,再判断的流程需求。
总之,大致的流程是
使用正则表达式进行判断。
匹配中文标点符号:
[\u3002\uff1b\uff0c\uff1a\u201c\u201d\uff08\uff09\u3001\uff1f\u300a\u300b]
匹配这些符号 。 ; , : “ ”( ) 、 ? 《 》
匹配中文汉字:[\u4e00-\u9fa5]
func ContainsHan(str string) bool {
han := regexp.MustCompile("^[\u4e00-\u9fa5]$")
//如果要添加标点符号识别
punc := regexp.MustCompile("^[\u3002\uff1b\uff0c\uff1a\u201c\u201d\uff08\uff09\u3001\uff1f\u300a\u300b]$")
// 遍历查找
for _, v := range str {
// golang中string的底层是byte类型,使用for-range来输出,避免中文乱码
// for-range 返回的 value 是 rune 类型
if han.MatchString(string(v)) || punc.MatchString(string(v)) {
return true
}
}
return false
}
建议在数据添加、修改前调用函数判断。
数据库可以设置一个字段,或者在文本前面设置一个标志位,用于判断是否包含。
5 回答3.4k 阅读✓ 已解决
3 回答3.7k 阅读✓ 已解决
5 回答1.5k 阅读
2 回答2.1k 阅读
3 回答2.1k 阅读
1 回答914 阅读
1 回答601 阅读✓ 已解决
如果需要对这些数据实时处理,对实时性要求高
可以尝试在数据表中多加一个字段 is_cn(是否有中文,0:否,1:是)
然后批量生成一下这个字段