拒绝乱码字符

92 阅读2分钟

前提

前端时间的公司的文件仓库类的项目,这两天发现有个问题,就是返回的结果中出现了相同路径的两条数据,仔细一看发现 path 中包含了乱码字符。问了别人才知道是他们程序中没有使用 utf-8 编码,创建路径的时候就出现了这个问题

那为什么同样的乱码字符能够插入两遍呢?因为是做了应用层面的唯一性校验,并且这些乱码字符插入到数据库之后又变成了其他的样子,只能全表查询到,指定匹配是匹配不到的

出现这个问题之后也是也是第一时间进行了处理,删除了那些乱码的数据,接着就是紧急修改这个问题了

正文

因为之前要求是上传路径要支持所有能支持的字符,所以就没有对 path 中的字符作限制。现在至少是要对上传的文件路径中包含乱码的进行限制了,具体如下:

go

package main


import (
    "fmt"
    "regexp"
)


func main() {
    str := "Windows瀹夎鍖?"


    // 定义一个正则表达式,用于匹配特定的字符
    pattern := "[^\x20-\x7E\u4E00-\u9FA5]"
    re := regexp.MustCompile(pattern)


    // 使用正则表达式进行匹配
    if re.MatchString(str) {
        fmt.Println("存在中文乱码问题")
    }
}

这个正则表达式  [^\x20-\x7E\u4E00-\u9FA5]  用于匹配不是 ASCII 字符、不是中文字符的特殊字符。这样应该就能支持正常的

结尾

现在在 golang 语言中,大部分的情况都是使用 utf-8 编码,所以很少出现编码的问题。正常的页面中上传时也是用的 utf-8 ,也不会出现什么问题。这次出现问题的就是在其他开发的一个 bat 脚本中使用了 GBK 编码引起的;所以之后的代码中一定还是要注意这方面的问题

还有就是不同的程序对编码的显示不一样, go 程序中可能是这样 Windows瀹夎鍖? ,但是到了 postgre 中,又会变成这样 Windows瀹夎鍖?/ ,所以要保持唯一性,最好还是在数据库层面进行设置