package main
import (
"fmt"
)
func printBytes(s string) {
for i:= 0; i < len(s); i++ {
fmt.Printf("%x ", s[i])
}
}
func printChars(s string) {
runes := []rune(s)
for i:= 0; i < len(runes); i++ {
fmt.Printf("%c ",runes[i])
}
}
func main() {
runeSlice := []rune{0x0053, 0x0065, 0x00f1, 0x006f, 0x0072}
str := string(runeSlice)
fmt.Println(str)
name := "Señor"
printBytes(name)
fmt.Printf("\n")
printChars(name)
}
输出
Señor
53 65 c3 b1 6f 72 //5个字符被分成6个
S e ñ o r
UTF8编码导致的问题,UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码,由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8
用1到6个字节
编码Unicode字符0x00f1
已经是8-11
比特的范围了。len
是计算字节数,所以你len中文会返回3*中文数
的长度