以下代码段将ISO-8859-1
编码文本转换为UTF8
. 我不完全明白这里发生了什么。有人可以解释为什么这有效吗?
var utf8Buf bytes.Buffer
for _, b := range iso8859Slice {
utf8Buf.WriteRune(rune(b))
}
utf8Str := utf8Buf.String()
以下代码段将ISO-8859-1
编码文本转换为UTF8
. 我不完全明白这里发生了什么。有人可以解释为什么这有效吗?
var utf8Buf bytes.Buffer
for _, b := range iso8859Slice {
utf8Buf.WriteRune(rune(b))
}
utf8Str := utf8Buf.String()
该循环采用 iso8859Str 切片的每个字节,假设它是类型[]byte
由于 iso-8859-1 被合并为 Unicode 的前 256 个代码点,因此您无需从 iso-8859-1 实际转换为 Unicode。
但是,您需要做的是对 Unicode 符文进行 UTF-8 编码。这是由 Buffer.WriteRune() 完成的
WriteRune 将 Unicode 代码点 r 的 UTF-8 编码附加到缓冲区
第一:如果是字符串类型,它不起作用!iso8859Str
但是如果 iso8859Str
是 []byte 类型,则您的range
子句迭代字节,这就是 unicode 的设计方式:ISO 8859-1 中的字节对应于相同的 unicode 代码点。