遇到的问题:md5哈希得到的值是16字节的值,是无法与字符编码对应的,使用ioutil.writefile写到文件里出现得到的文件是乱码的问题。
原因:ioutil.writefile默认[]byte数组是以utf-8编码的字符数组。
go语言默认utf-8编码,string类型转[]byte类型:“abc黄” →616263e9bb84(61即97,黄占三个字节)
测试:ioutil.Readfile()从文件读到[]byte里,默认是以字符串方式读取再转成[]byte数组。如文件中是abc黄,ioutil.Readfile()读取得到的byte数组是[97 98 99 233 187 132],可以使用%s格式化输出为abc黄,%x十六进制输出为616263e9bb84。
解决方法:
使用fmt.Fprintf(file,"%x",hash)以十六进制数字输出,就不会出现乱码问题。
读取时,需要同样以十六进制数格式化读取,
file := os.Open(“path”)
fmt.Fscanf(file,"%x",hash),得到的hash就是原来的[]byte类型的16位的哈希值。