python - 以文本模式打开文件会导致 Python 中的数据丢失 : why?

标签 python codec 8-bit 7-bit

codecs.open() 的文档提到

Files are always opened in binary mode, even if no binary mode was specified. This is done to avoid data loss due to encodings using 8-bit values.

对文件使用文本模式如何导致“数据丢失”?听起来在文本模式下打开文件可能会将字节截断为 7 位,但我在文档中找不到任何提及:文本模式是 described仅作为转换换行符的一种方式,没有提及一些潜在的数据丢失。那么,codecs.open() 的文档指的是什么?

PS:虽然自动换行符转换为依赖于平台的换行符编码需要一些小心是可以理解的,但问题是关于 8 位编码的具体内容。我猜想只有 一些 编码与自动换行符转换兼容,无论它们是 8 位还是 7 位编码。那么,为什么在 codecs.open() 的文档中单独列出 8 位编码?

最佳答案

我认为他们的意思是一些编码至少在某些字节中使用所有 8 位,因此所有 256 个值都是可能的(特别是,有可能获得不表示 CR 或 LF 的 0x0A 或 0x0D) .

相比之下,在 UTF-8 文件中,CR 和 LF 字符(以及所有其他低于 0x80 的字符)总是转换为它们自己。它们不能作为其他字符编码的一部分出现。

关于python - 以文本模式打开文件会导致 Python 中的数据丢失 : why?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6036677/

相关文章:

c++ - 如何从H264中的ffmpeg读取sei未注册的用户数据?

java - 寻找好的Java音频压缩库

java - RGB 24 位到 RGB 8 位位移

python - Pandas:通过拆分列和变量中的列来 reshape 数据框

python - 我必须做 StringIO.close() 吗?

python - 使用其他列有条件地更新 Pandas DataFrame 列

python - 根据另一个的范围和类别填充 Pandas 列

c - Libav(ffmpeg)容器编解码器时基和流时基的目的是什么?

algorithm - tinyAVR : best known multiplication routines for 8-bit and 16-bit factors?

assembly - 两个 16 位数字的 GCD(最大公约数)