为什么我不能使用 utf-8 解码任何字节?
Why can't I decode any byte using utf-8?
不是编码专家,正在努力学习。
我得到一个拉丁编码的文件,当我试图读取它并使用 'utf-8' 解码时,我收到以下错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 0: invalid start byte
为什么 utf-8(每个字符使用 1-4 个字节)不能解码 latin1(每个字符 1 个字节)。
latin1 是 utf-8 的子集吗?我对此很迷茫,所以任何帮助。
混淆了两个不同的概念。
一个字符集是字符的排序,编号从0到...
编码 是一种将字符集中的数字表示为字节序列的方法。
对于最多 256 个字符的字符集,简单的单字节编码是可能的。
对于较大的字符集,需要多字节编码。它们可以分为两种类型:固定大小,其中每个字符使用相同的字节数,以及可变大小,其中使用不同的字节数来表示不同的字符。
固定大小编码的示例都是单字节编码和 UTF-32。
可变大小编码的示例是 UTF-8 和各种 UTF-16 编码。
Latin-1既是字符集(包含ASCII字符及其用于书写西欧语言的附加字符)又是(有256个字符)其对应的单字节编码
Unicode是一个字符集,包含(或旨在包含)编写所有已知语言的所有字符。毫不奇怪,它比 256 个字符大得多。
UTF-8 只是 Unicode 的一种多字节编码,而且是一种可变大小的编码。每个 UTF-8 序列的第一个字节告诉您如何 附加 个字节跟随它来编码单个 Unicode 代码点。
Unicode 和 Latin-1(字符集)的前 256 个代码点一致。也就是说,Latin-1 是 Unicode 的一个子集。
UTF-8 和 Latin-1 的前 128 个序列一致。之后,他们发生分歧。在 UTF-8 中,代码点 128 到 255 需要两个字节。第一个字节的形式为 110xxxxx,第二个字节为 10xxxxxx。 11 个 x 位可用于编码 Unicode 的其余 Latin-1 子集(加上附加块)。
字节 0xa0
不是有效的 UTF-8,因为它的二进制扩展是 10100000。多字节 UTF-8 序列的第一个字节总是至少以 two[=45 开头=] 1s(直观上,1的个数表示序列中的字节数)。
不是编码专家,正在努力学习。
我得到一个拉丁编码的文件,当我试图读取它并使用 'utf-8' 解码时,我收到以下错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 0: invalid start byte
为什么 utf-8(每个字符使用 1-4 个字节)不能解码 latin1(每个字符 1 个字节)。
latin1 是 utf-8 的子集吗?我对此很迷茫,所以任何帮助。
混淆了两个不同的概念。
一个字符集是字符的排序,编号从0到...
编码 是一种将字符集中的数字表示为字节序列的方法。
对于最多 256 个字符的字符集,简单的单字节编码是可能的。
对于较大的字符集,需要多字节编码。它们可以分为两种类型:固定大小,其中每个字符使用相同的字节数,以及可变大小,其中使用不同的字节数来表示不同的字符。
固定大小编码的示例都是单字节编码和 UTF-32。
可变大小编码的示例是 UTF-8 和各种 UTF-16 编码。
Latin-1既是字符集(包含ASCII字符及其用于书写西欧语言的附加字符)又是(有256个字符)其对应的单字节编码
Unicode是一个字符集,包含(或旨在包含)编写所有已知语言的所有字符。毫不奇怪,它比 256 个字符大得多。
UTF-8 只是 Unicode 的一种多字节编码,而且是一种可变大小的编码。每个 UTF-8 序列的第一个字节告诉您如何 附加 个字节跟随它来编码单个 Unicode 代码点。
Unicode 和 Latin-1(字符集)的前 256 个代码点一致。也就是说,Latin-1 是 Unicode 的一个子集。
UTF-8 和 Latin-1 的前 128 个序列一致。之后,他们发生分歧。在 UTF-8 中,代码点 128 到 255 需要两个字节。第一个字节的形式为 110xxxxx,第二个字节为 10xxxxxx。 11 个 x 位可用于编码 Unicode 的其余 Latin-1 子集(加上附加块)。
字节 0xa0
不是有效的 UTF-8,因为它的二进制扩展是 10100000。多字节 UTF-8 序列的第一个字节总是至少以 two[=45 开头=] 1s(直观上,1的个数表示序列中的字节数)。