【问题标题】:Problems with the encoding of several concatenated files in python?python中几个连接文件的编码问题?
【发布时间】:2015-02-07 21:17:05
【问题描述】:

我有一个包含大量西班牙语的.txt 文件的文件夹,我决定将它们合并到一个.txt 文件中,如下所示:

导入操作系统 导入shutil

def concatFiles():
    path = '/Users/user/Desktop/OpinionsTAG_txt/'
    files = os.listdir(path)
    with open("/Users/user/Desktop/concat_file.txt", "wb") as fo:
        for f in files:
            with open(os.path.join(path, f), "rb") as fi:
                shutil.copyfileobj(fi, fo)


if __name__ == "__main__":
    concatFiles()

问题是输出(即concat_file)不尊重字符西班牙编码,例如concat_filedirecci√≥n 而不是dirección。另一件事是我在 OS X 中工作,当我用崇高的文本打开 concat_file 时,它看起来像这样:0000 0001 2000 0000 0000 0001 4000 0000 当我用文本编辑打开 concat_file 时,它看起来像我想要的那样,为什么会这样我该如何解决?

【问题讨论】:

    标签: python python-2.7 encoding character-encoding


    【解决方案1】:

    按照此处的建议尝试使用编解码器:https://stackoverflow.com/a/19591815/4339369。这将允许您以 UTF-8 格式读取和写入文件,这可能会解决您的问题。

    import codecs
    import os
    import shutil
    def concatFiles():
        path = '/Users/user/Desktop/OpinionsTAG_txt/'
        files = os.listdir(path)
        with codecs.open("/Users/user/Desktop/concat_file.txt", "wb",encoding='utf8') as fo:
            for f in files:
                with codecs.open(os.path.join(path, f), "rb",encoding='utf8') as fi:
                    shutil.copyfileobj(fi, fo)
    
    
    if __name__ == "__main__":
        concatFiles()
    

    可以在此处找到有关 Python 2.x 中 Unicode 问题的完整概述:http://nedbatchelder.com/text/unipain.html

    为将来的任何人编辑:在 OS X 上,您通常可以通过以下方式确定文件的编码

    file -I <filename>
    

    来自How do I determine file encoding in OSX?

    【讨论】:

    • 谢谢,这是输出:newchars, decodedbytes = self.decode(data, self.errors) UnicodeDecodeError: 'utf8' codec can't decode byte 0xe8 in position 10: invalid continuation byte
    • 这是否意味着文件不在utf8中?
    • 如果您还不知道文件是如何编码的,这有点像猜测和检查。
    • 我尝试过使用 utf8、utf16、utf32 和 ascii。仍然得到同样的例外。我还能做什么?
    • cp1252 或 mac_roman 或 utf-7 是我猜的可能性。我的想法不多了。
    猜你喜欢
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 2014-03-12
    相关资源
    最近更新 更多