更改 Python 中的文件编码方案



我正在尝试使用拉丁语 1 编码打开文件以生成具有不同编码的文件。我得到一个NameErrorunicode is not defined.这是我用来写的代码段:

sourceEncoding = "latin-1"
targetEncoding = "utf-8"
source = open(r'C:UserschsafouaneDesktopsaf.txt')
target = open(r'C:UserschsafouaneDesktopsaf2.txt', "w")
target.write(unicode(source.read(), sourceEncoding).encode(targetEncoding))

我根本不习惯处理文件,所以我不知道是否有一个模块应该导入以使用"unicode">

你看到unicode not defined的事实表明你在 Python3 中。这里有一个代码片段,它将生成一个 latin1 编码的文件,然后执行你想做的事情,啜饮 latin1 编码的文件并吐出一个 UTF8 编码的文件:

# Generate a latin1-encoded file
txt = u'U+00AxNBSP¡¢£¤¥¦§¨©ª«¬SHY­®¯U+00Bx°±²³´µ¶·¸¹º»¼½¾¿U+00CxÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏU+00DxÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßU+00ExàáâãäåæçèéêëìíîïU+00Fxðñòóôõö÷øùúûüýþÿ'
latin1 = txt.encode('latin1')
with open('example-latin1.txt', 'wb') as fid:
    fid.write(latin1)
# Read in the latin1 file
with open('example-latin1.txt', 'r', encoding='latin1') as fid:
    contents = fid.read()
assert contents == latin1.decode('latin1') # sanity check
# Spit out a UTF8-encoded file
with open('converted-utf8.txt', 'w') as fid:
    fid.write(contents)

如果您希望输出不是 UTF8,请在 open 中添加一个 encoding 参数,例如

with open('converted-utf_32.txt', 'w', encoding='utf_32') as fid:
    fid.write(contents)

这些文档包含所有受支持的编解码器的列表。

最新更新