Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将Unicode写入HTML文件不同于普通文件_Python_Html_Python 2.7_Unicode - Fatal编程技术网

Python 将Unicode写入HTML文件不同于普通文件

Python 将Unicode写入HTML文件不同于普通文件,python,html,python-2.7,unicode,Python,Html,Python 2.7,Unicode,我在用脚本写入文件时遇到了字符编码问题。我正在做的是从一个带有API的网站下载一些信息。我无法控制接收信息的格式,但这里有一个快速示例: {'id': 12, 'name': "Kathy \xc3\x93 Fakename"} {'id': 23, 'name': "Se\xc3\xb1or Murphy"} (那里的名字是“凯西·法克纳姆”和“塞纳或例子”) 这基本上是好的,当我将它们写入一个没有文件类型的通用文件时,我会得到具有正确字符的正确格式 然而,我有两个问题。我正在将所有这些信息

我在用脚本写入文件时遇到了字符编码问题。我正在做的是从一个带有API的网站下载一些信息。我无法控制接收信息的格式,但这里有一个快速示例:

{'id': 12, 'name': "Kathy \xc3\x93 Fakename"}
{'id': 23, 'name': "Se\xc3\xb1or Murphy"}
(那里的名字是“凯西·法克纳姆”和“塞纳或例子”)

这基本上是好的,当我将它们写入一个没有文件类型的通用文件时,我会得到具有正确字符的正确格式

然而,我有两个问题。我正在将所有这些信息写入一个html表中。当我以
.html
结尾写入文件时,会将错误的字符写入文件。相反,我最终得到了名称
KathyÓFakename
SeÔ或示例
。这些不正确的字符也会显示为实际的文件名,即使我想要的更正对文件名完全有效

我相信我已经验证了唯一的区别是文件类型,尽管我仍然感到困惑,因为我不希望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']))
将open(os.path.abspath(“Test.html”),“w”)作为f:
对于用户中的用户:
f、 写入(“{}:{}
”。格式(用户['id'],用户['name'])) 将open(os.path.abspath(“Test”),“w”)作为f: 对于用户中的用户: f、 写入(“{}:{}\n.”格式(用户['id'],用户['name']))
导致

Test
12: Kathy Ó Fakename
23: Señor Murphy

Test.html
12: Kathy Ó Fakename<br>
23: Señor Murphy<br>
测试
12:KathyÓFakename
23:Señor Murphy
Test.html
12:KathyÓFakename
23:Señ或Murphy

造成这种差异的原因是什么?

您正在写入UTF-8数据,但您用来读取文件的任何工具都将文件解码为Windows CP 1251:

>>> print "Kathy \xc3\x93 Fakename".decode('utf8')
Kathy Ó Fakename
>>> print "Kathy \xc3\x93 Fakename".decode('cp1252')
Kathy Ó Fakename
>>> print "Se\xc3\xb1or Murphy".decode('utf8')
Señor Murphy
>>> print "Se\xc3\xb1or Murphy".decode('cp1252')
Señor Murphy
使用正确的工具或告诉这些工具改用UTF-8。使用HTML时,您可以包括一个工具来告诉工具要使用什么编解码器:


凯西·法克纳姆
塞尼或墨菲
您可能想了解Python和Unicode:

  • 乔尔斯波尔斯基

  • 内德·巴奇尔德


您正在写入UTF-8数据,但您用于读取文件的任何工具都将文件解码为Windows CP 1251:

>>> print "Kathy \xc3\x93 Fakename".decode('utf8')
Kathy Ó Fakename
>>> print "Kathy \xc3\x93 Fakename".decode('cp1252')
Kathy Ó Fakename
>>> print "Se\xc3\xb1or Murphy".decode('utf8')
Señor Murphy
>>> print "Se\xc3\xb1or Murphy".decode('cp1252')
Señor Murphy
使用正确的工具或告诉这些工具改用UTF-8。使用HTML时,您可以包括一个工具来告诉工具要使用什么编解码器:


凯西·法克纳姆
塞尼或墨菲
您可能想了解Python和Unicode:

  • 乔尔斯波尔斯基

  • 内德·巴奇尔德


您正在编写UTF-8,但是如果您使用需要拉丁语1或Windows代码页1251的工具打开文件,那么是的,您将看到一个。@padraiccningham:查看标记。:-)您正在编写UTF-8,但是如果您使用需要拉丁语1或Windows代码页1251的工具打开文件,那么是的,您将看到一个。@padraiccningham:查看t他标记:-)我觉得很愚蠢,我没有想到我仍然在浏览器中查看HTML源代码而不是Notepad++(我在查看普通文件)。所以这正是我的错误,谢谢!我觉得很愚蠢,我没有想到我仍然在浏览器中查看HTML源代码而不是Notepad++(我在看普通文件的地方)。所以这正是我的错误,谢谢!