读取文件时 encoding='latin-1' 有啥作用[重复]

Posted

技术标签:

【中文标题】读取文件时 encoding=\'latin-1\' 有啥作用[重复]【英文标题】:What does encoding='latin-1' do when reading a file [duplicate]读取文件时 encoding='latin-1' 有什么作用[重复] 【发布时间】:2021-12-30 18:54:41 【问题描述】:

我正在使用Youtube channel 来学习机器学习算法。在这个视频的某个地方,我遇到了一个输入到 pd.read_csv 方法中的参数,称为encoding='latin-1'。这个参数的作用是什么?

【问题讨论】:

kunststube.net/encoding 【参考方案1】:

https://en.wikipedia.org/wiki/ISO/IEC_8859-1

Latin-1 与 8859-1 相同。每个字符都被编码为一个字节。共有 191 个字符。

【讨论】:

【参考方案2】:

这里是encoding参数的根本原因。

说英语的人生活在一个简单的世界里,编写任何类型的文本或计算机代码所需的字符数量足够少,可以存储在 8 位字节中(顺便说一句,即使是 7 位字节,但那不是点)。因此,1 个字符 = 1 个字节,每个人都同意 256 个可能的 8 位值中的每一个的含义。

许多其他语言,即使是那些使用相同拉丁字母的语言,也需要英语中不存在的各种重音字母和特色。此外,所有这些语言的所有特殊字符都不适合 256 个不同的字节值。从历史上看,每个语言社区都为所有大于 127 的字节值确定了特定的编码。latin-1,又名 iso-8859-1,是其中一种编码,但正如您可能猜到的那样,不是唯一的一种。当然,这不能很好地扩展,并且不适用于不使用拉丁字母并且需要超过 256 个不同值的语言。

在所有现代语言中,字符和字节是两个不同的东西。 (将这句话读两遍或更多,并投入到永久的大脑记忆中)

计算机无法“猜测”哪个是字节流(如 csv 文件)的编码,您将其作为文本(= 字符串)处理。因此,读取文件的函数(我没有看视频,但函数的名称足够明确以理解其目的)必须将字节(在磁盘上)转换为字符(在内存中,使用任何内部表示语言碰巧使用)。反之,当您必须向只能接受 8 位字节的磁盘或网络写入内容时,您必须将字符转换回字节。

这些转换是使用您的文件/字节流/网络协议正在使用的特定编码执行的。

附带说明,您应该考虑在新的开发中尽可能地摆脱 8859-* 编码并使用 unicode 和 utf-8 编码。

【讨论】:

以上是关于读取文件时 encoding='latin-1' 有啥作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从绝对 URL 读取图像文件时的 ENCODING_ERR

文件读取

使用 Latin-1 编码 Spyne SOAP XML 响应

python读取csv文件时,数据内容含有中文,读取出错,怎么办

Python读取txt文件时第一行出现 ufeff 这个字符

Python ISO-8859-1 编码