1

以下代码段将ISO-8859-1编码文本转换为UTF8. 我不完全明白这里发生了什么。有人可以解释为什么这有效吗?

var utf8Buf bytes.Buffer
for _, b := range iso8859Slice {
  utf8Buf.WriteRune(rune(b))
}
utf8Str := utf8Buf.String()
4

2 回答 2

2

该循环采用 iso8859Str 切片的每个字节,假设它是类型[]byte

由于 iso-8859-1 被合并为 Unicode 的前 256 个代码点,因此您无需从 iso-8859-1 实际转换为 Unicode。

但是,您需要做的是对 Unicode 符文进行 UTF-8 编码。这是由 Buffer.WriteRune() 完成的

WriteRune 将 Unicode 代码点 r 的 UTF-8 编码附加到缓冲区

于 2013-09-18T11:45:49.550 回答
1

第一:如果是字符串类型,它不起作用!iso8859Str

但是如果 iso8859Str是 []byte 类型,则您的range子句迭代字节,这就是 unicode 的设计方式:ISO 8859-1 中的字节对应于相同的 unicode 代码点。

于 2013-09-18T11:46:00.923 回答