当前位置: 首页 > 面试题库 >

如何将utf8字符串转换为[] byte?

宗安宁
2023-03-14
问题内容

我想解组string包含JSON的a,但是该Unmarshal函数将a []byte作为输入。

如何将UTF8转换string[]byte


问题答案:

这个问题可能是如何将字符串分配给bytes数组的重复,但是仍然有答案,因为有更好的替代解决方案:

从转换string[]byte由该规范允许的,使用一个简单的转换:

字符串类型之间的转换

[…]

  1. 将字符串类型的值转换为字节片的类型会产生一个片,其连续元素是字符串的字节。

因此,您可以简单地执行以下操作:

s := "some text"
b := []byte(s) // b is of type []byte

但是,该string => []byte转换会复制字符串内容(它必须复制,因为strings是不可变的,而[]byte值不是固定的),并且在strings
大的情况下效率不高。相反,您可以创建一个io.Reader使用方法strings.NewReader(),该方法将从传递的内容中读取内容,而string无需进行复制。您可以使用以下html" target="_blank">方法将此传递io.Readerjson.NewDecoder()并解组Decoder.Decode()

s := `{"somekey":"somevalue"}`

var result interface{}
err := json.NewDecoder(strings.NewReader(s)).Decode(&result)
fmt.Println(result, err)

输出(在Go Playground上尝试):

map[somekey:somevalue] <nil>

注意:调用strings.NewReader()json.NewDecoder()确实有一些开销,因此,如果您使用的是小型JSON文本,则可以安全地将其转换为[]byte和使用json.Unmarshal(),它不会变慢:

s := `{"somekey":"somevalue"}`

var result interface{}
err := json.Unmarshal([]byte(s), &result)
fmt.Println(result, err)

输出是相同的。在Go Playground上尝试一下。

注意:如果要string通过读取一些内容io.Reader(例如文件或网络连接)来获取JSON输入,则可以将其直接传递io.Readerjson.NewDecoder(),而不必先从中读取内容。



 类似资料:
  • 我需要读入带有unicode转义的标准ascii样式字符串,并将其转换为包含utf8编码等价物的std::字符串。因此,例如“\u03a0”(包含6个字符的std::字符串)应转换为包含两个字符的std::字符串,分别为0xCE和0xA0,以原始二进制格式。 如果有一个简单的答案使用icu或boost我会很高兴,但我还没有找到一个。 (这类似于将Unicode字符串转换为转义ASCII字符串,但注

  • 问题内容: 我能够从发送消息到上。如果我从发送消息,则使用任何可访问性(包括完整的语言本地化)都没有区别;英语也没有问题。正确的编码很重要,只有以下代码行: 不幸的是,这是无效的。我要从中获取消息的情况有所不同。 在我得到消息的情况下,从Windows操作系统(英语,没有任何语言包),我能够把消息来自于形式。 如果Windows操作系统使用某些语言包进行了完全本地化,则我将收到一个例外 消息缓冲区

  • 问题内容: 我想使用node.js进行HTTP请求以从Web服务器加载一些文本。由于响应可能包含很多文本(有些兆字节),因此我想分别处理每个文本块。我可以使用以下代码来实现: 这似乎没有问题。但是我想支持HTTP压缩,所以我使用zlib: 这可以是像多字节字符的问题,其由两个字节组成:和。如果第一个字节被第一个块()覆盖,第二个字节被第二个块覆盖,则将在文本块的结尾/开头产生不正确的字符。如何避免

  • 问题内容: 直到今天,我才意识到我的PHP脚本中缺少此功能: 我所有的表都是InnoDB,归类为“ utf8_unicode_ci”,我所有的VARCHAR列也均为“ utf8_unicode_ci”。我有我的PHP脚本,和我所有的PHP文件编码为UTF-8。 因此,直到现在,每次我用变音符号“插入”某些东西时,例如: 在这种情况下,“名称”内容为:。 由于我固定了PHP和MySQL之间的字符集,

  • 问题内容: 如何使用JavaScript转换字节数组中的字符串。输出应等效于以下C#代码。 由于UnicodeEncoding默认为具有Little-Endianness的UTF-16。 编辑: 我需要使用上面的C#代码将字节数组生成的客户端与服务器端生成的字节数组进行匹配。 问题答案: 在C#中运行 将创建一个数组 对于代码大于255的字符,它将如下所示 如果您希望在JavaScript中实现非

  • 问题内容: 我正在阅读有关python的新f字符串的 博客 ,它们看起来很整洁。但是,我希望能够从字符串或文件中加载f字符串。 我似乎找不到任何执行此操作的字符串方法或其他函数。 从上面我的链接中的示例: 但是,如果我有琴弦怎么办?我希望能够像这样: 事实证明,我已经可以执行类似的操作并获得性能提高。即: 问题答案: f字符串是代码。不仅以安全的方式(当然,字符串文字就是代码),而且以危险的任意代