使用开放参数编码与编码字符串方法字节大小

encoding with open parameter vs encode string method byte size

我遇到了一些我无法理解的事情。

所以我尝试使用字符串编码方法和开放编码参数用一个 unicode 字符对我的字符串进行编码。由于某种原因,这两种方法在写入字节大小方面存在差异。

示例代码如下:

with open("in.txt", "wb") as f:
    no = f.write("Wlazł".encode("utf-8"))
    print(no) # -> 6
with open("in.txt", "w", encoding="utf-8") as f:
    no = f.write("Wlazł")
    print(no) # -> 5

有谁知道为什么会这样吗?

当您以二进制模式打开文件时,您会得到一个 io.RawIOBase, and RawIOBase.write returns 的实例,即写入的 字节 的数量。

当您以文本模式打开文件时,您会得到一个实例 io.TextIOBase, and TextIOBase.write returns 写入的 个字符 的数量。

所以造成差异的原因是一个是字节,另一个是字符