使用的是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):
有没有办法让python中的内容值严格为UTF-8?
在运行此python脚本之前,在Ubuntu Linux中使用命令行实用程序转换文件是否更好?
错误是编码问题(例如文件是ASCII而不是UTF8)?
答案 0 :(得分:0)
@Apalala
非常感谢chardet!这是一个非常有用的工具。
@Ulrich Ekhardt
你是对的,它是UTF-8而不是ASCII。
这是解决方案:
iconv --from-code UTF-8 --to-code US-ASCII -c hello.htm > hello.html