Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C的Encoding.UTF8.GetString在Go中等效_C#_Go_Utf 8 - Fatal编程技术网

C# C的Encoding.UTF8.GetString在Go中等效

C# C的Encoding.UTF8.GetString在Go中等效,c#,go,utf-8,C#,Go,Utf 8,Go中C的Encoding.UTF8.GetString的等价物是什么 正如我已经知道的,Go的默认编码是UTF8,Go中的stringsomebytes将生成UTF8编码的字符串 C: 去: C代码生成: �������*\��W��P�p�� �������*\��W���P�p�� Go代码生成: �������*\��W��P�p�� �������*\��W���P�p�� 我错过了什么 很明显,不管你怎么看,你的字节都不是有效的UTF-8 比如说, package main

Go中C的Encoding.UTF8.GetString的等价物是什么

正如我已经知道的,Go的默认编码是UTF8,Go中的stringsomebytes将生成UTF8编码的字符串

C:

去:

C代码生成:

�������*\��W��P�p��
�������*\��W���P�p��
Go代码生成:

�������*\��W��P�p��
�������*\��W���P�p��

我错过了什么

很明显,不管你怎么看,你的字节都不是有效的UTF-8

比如说,

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\n", bytes)
    fmt.Printf("% x\n", bytes)
    fmt.Printf("%q\n", bytes)
    fmt.Printf("%s\n", bytes)
}
游乐场:

输出:

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��
参考资料:


您的输入字节序列不是一个有效的UTF-8字节序列,但您正试图这样对待它。扩展@icza的观点:如果您尝试对非UTF-8输入的内容进行UTF-8解码,则输出是未定义的。对于一个未定义的场景,两个不同的框架将产生不同的结果,这是完全合理的。从技术上讲,一个框架根据一周中的哪一天产生不同的结果是合法的。。。毕竟,这是:UnfinedPerhaps在这里探索的一个更富有成效的途径是-你想做什么?:因为数据不是utf-8,显然将其解码为utf-8不是一个好的选择。将它显示为十六进制对你有用吗?@MarcGravel:如果你试图对不是utf-8输入的东西进行utf-8解码,那么输出是未定义的。UTF-8和Go的合著者Rob Pike返回Go中无效UTF-8的Unicode替换字符。输出是定义良好的,尽管它可能没有用处。@Kunal hmac sha哈希的输出不是utf-8。所以我所说的一切仍然适用。事实上:哈希几乎总是用十六进制表示