【发布时间】:2015-07-22 10:59:41
【问题描述】:
我在使用脚本写入文件时遇到字符编码问题。我正在做的是从带有 API 的网站下载一些信息。我无法控制接收信息的格式,但这里有一个快速示例:
{'id': 12, 'name': "Kathy \xc3\x93 Fakename"}
{'id': 23, 'name': "Se\xc3\xb1or Murphy"}
(名字有“Kathy Ó Fakename”和“Señor Example”)
这基本没问题,当我将这些写入没有文件类型的通用文件时,我会以正确的格式和正确的字符获取它们。
但是我有两个问题。我正在将所有这些信息写入一个 html 表。当我以.html 结尾写入文件时,错误的字符被写入文件。相反,我最终得到了Kathy Ó Fakename 和Señor Example 的名称。这些不正确的字符也显示为实际的文件名,即使我想要的更正对文件名完全有效。
我相信我验证了唯一的区别是文件类型,尽管我仍然感到困惑,因为我没想到 Python 会隐式调整我写的内容。此外,它肯定是在 HTML 的源代码中,而不仅仅是它的显示方式。
为了演示,这段代码:
with open(os.path.abspath("Test.html"),'w') as f:
for user in users:
f.write("{}: {}<br>".format(user['id'], user['name']))
with open(os.path.abspath("Test"),'w') as f:
for user in users:
f.write("{}: {}\n".format(user['id'], user['name']))
结果
Test
12: Kathy Ó Fakename
23: Señor Murphy
Test.html
12: Kathy Ó Fakename<br>
23: Señor Murphy<br>
是什么导致了这里的差异?
【问题讨论】:
-
您正在编写 UTF-8,但如果您使用需要拉丁 1 或 Windows 代码页 1251 的工具打开文件,那么是的,您将看到 Mojibake。
-
@PadraicCunningham:看看标签。 :-)
标签: python html python-2.7 unicode