C#'s Encoding.UTF8.GetString equivalent in Go
go中的c s encoding.utf8.getString的等效值是什么?
正如我已经知道的,go的默认编码是utf8,而go中的字符串(somebytes)将生成一个utf8编码的字符串。
C:
1 2 3 4 5 6 7 | public static void Main() { byte[] bytes = new byte[] { 144, 197, 217, 192, 204, 249, 181, 42, 92, 252, 243, 87, 170, 243, 169, 80, 175, 112, 192, 239}; string str = Encoding.UTF8.GetString(bytes); Console.WriteLine(str); } |
去:
1 2 3 4 5 | func main() { bytes := []byte { 144, 197, 217, 192, 204, 249, 181, 42, 92, 252, 243, 87, 170, 243, 169, 80, 175, 112, 192, 239} str := string(bytes) fmt.Println(str) } |
C代码产生:
1 | ???????*\??W??P?p?? |
Go代码生成:
1 | ???????*\??W???P?p?? |
我这里缺少什么?
很明显,不管你怎么看,你的
例如,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package main import ( "fmt" ) func main() { bytes := []byte{144, 197, 217, 192, 204, 249, 181, 42, 92, 252, 243, 87, 170, 243, 169, 80, 175, 112, 192, 239} fmt.Println(len(bytes)) fmt.Printf("%v ", bytes) fmt.Printf("% x ", bytes) fmt.Printf("%q ", bytes) fmt.Printf("%s ", bytes) } |
游乐场:https://play.golang.org/p/bhkeguzck
输出:
1 2 3 4 5 | 20 [144 197 217 192 204 249 181 42 92 252 243 87 170 243 169 80 175 112 192 239] 90 c5 d9 c0 cc f9 b5 2a 5c fc f3 57 aa f3 a9 50 af 70 c0 ef "\x90\xc5\xd9\xc0\xcc\xf9\xb5*\\\xfc\xf3W\xaa\xf3\xa9P\xafp\xc0\xef" ???????*\??W???P?p?? |
参考文献:
Unicode联合体
unicode:utf-8、utf-16、utf-32&bom
UTF-8-维基百科
go博客:go中的字符串、字节、符文和字符
转到:包UTF8