Python 2文件.writelines()Unicode在Windows和Linux上给出不同的结果

wpcxdonn  于 2023-04-11  发布在  Linux
关注(0)|答案(1)|浏览(141)

对于下面相同的代码:

import os

filename = "text.txt"
data = [
    [
    u"hello world1",
    u"hello world2",
    u"hello world3",
    ],
    [
    u"hello world1",
    u"hello world2",
    u"hello world3",
    ],
]

# remove file if exist
if os.path.isfile(filename): os.remove(filename)

with open(filename, "ab+") as f:
    for item in data:
        f.writelines(item)
        f.write("\n")

在Windows上,text.txt给出:

在Linux上:

能否解释一下为什么以及如何获得与Windows上的Linux相似的结果?

f4t66c6m

f4t66c6m1#

使用file.writelines()时,应显式指定编码。
您可以使用with open(filename, 'w', encoding='utf-8') as f:而不是使用with open(filename, "ab+") as f:

说明:

在Windows上,文件I/O的默认编码通常是cp1252,它是ASCII的超集,其中包括许多西欧语言中使用的常用字符。这意味着如果您使用file.writelines()将Unicode字符串写入Windows上的文件,则它们将在写入文件之前自动编码为cp1252
在Linux上,文件I/O的默认编码通常是UTF-8,这是一种可变长度编码,可以表示任何Unicode字符。如果您使用file.writelines()将Unicode字符串写入Linux上的文件,则它们将在写入文件之前被编码为UTF-8

相关问题