应用需求

在开发网页抓取的时候,有可能你抓取得不是utf8,那么就要去判断抓取的是不是utf8编码,如果不是再去判断是否gbk,其他gb2312等也都用gbk看待.网上有写的很复杂的判断,没有必要去看,就这个简单

go判断字符串是否utf8

这个问题其实自带的库里面就有,包括了[]byte和string两种类型,这里只说string,[]byte可以转string.

1
2
3
4
//是否utf8
func Isutf8(s string)bool{
	return utf8.ValidString(s)
}

go判断是否gbk编码,判断gbk首先要判断是否utf8,所以上面函数也是需要的.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
func Isgbk(s string) bool {
	if Isutf8(s){
		return false
	}
	data:=[]byte(s)
	length := len(data)
	var i int = 0
	for i < length {
		//fmt.Printf("for %x\n", data[i])
		if data[i] <= 0xff {
			i++
			continue
		} else {
			if  data[i] >= 0x81 &&
				data[i] <= 0xfe &&
				data[i + 1] >= 0x40 &&
				data[i + 1] <= 0xfe &&
				data[i + 1] != 0xf7 {
				i += 2
				continue
			} else {
				return false
			}
		}
	}
	return true
}