Python - 尝试解析ASCII文件时的UnicodeDecodeError

时间:2016-01-12 20:02:13

标签: python unicode utf-8 ascii python-unicode

使用的是Python 2.7.6。

拥有一个HTML文件,其中包含以" $"为前缀的值。编写了一个程序,该程序接收JSON数据并使用JSON值替换$前面的值。

这个工作正常,直到有人用不同的编辑器打开HTML文件集并将其从UTF-8更改为ASCII。

class FileUtil:
    @staticmethod
    def replace_all(output_file, data):
        homedir = os.path.expanduser("~")
        dest_dir = homedir + "/dest_dir"
        with open(output_file, "r") as my_file:
            contents = my_file.read()
        destination_file = dest_dir + "/" + data["filename"]
        fp = open(destination_file, "w")
        for key, value in data.iteritems():
            contents = contents.replace("$" + str(key), value)
        fp.write(contents)
        fp.close()

每当我的程序遇到ASCII格式的文件时,都会抛出此错误:

Traceback (most recent call last):
    File "/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/application.py", line 239, in process
        return self.handle()
    File "/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/application.py", line 230, in handle
        return self._delegate(fn, self.fvars, args)
    File "/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/application.py", line 420, in _delegate
        return handle_class(cls)
    File "/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/application.py", line 396, in handle_class
        return tocall(*args)
    FileUtil.replace_all(output_file, data)
        File "/home/devuser/demo/utils/fileutils.py", line 11, in replace_all
            contents = contents.replace("$" + str(key), value)
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 54826: ordinal not in range(128)

问题(S):

  1. 有没有办法让python中的内容值严格为UTF-8?

  2. 在运行此python脚本之前,在Ubuntu Linux中使用命令行实用程序转换文件是否更好?

  3. 错误是编码问题(例如文件是ASCII而不是UTF8)?

1 个答案:

答案 0 :(得分:0)

@Apalala

非常感谢chardet!这是一个非常有用的工具。

@Ulrich Ekhardt

你是对的,它是UTF-8而不是ASCII。

这是解决方案:

iconv --from-code UTF-8 --to-code US-ASCII -c hello.htm > hello.html