从未知字符编码的字符串中转储JSON
我正在尝试把网站上的HTML内容转换成JSON格式,但我需要一种方法来处理不同的字符编码。
我了解到,如果不是utf-8编码,那可能就是ISO-8859-1编码。所以我现在的做法是:
for possible_encoding in ["utf-8", "ISO-8859-1"]:
try:
# post_dict contains, among other things, website html retrieved
# with urllib2
json = simplejson.dumps(post_dict, encoding=possible_encoding)
break
except UnicodeDecodeError:
pass
if json is None:
raise UnicodeDecodeError
当然,如果遇到其他编码,这种方法就会失败。因此,我在想有没有更通用的解决办法。
我之所以要把HTML序列化,主要是因为我需要把它通过POST请求发送到我们的NodeJS服务器。所以,如果有人有其他解决方案,可以让我做到这一点(也许根本不需要序列化成JSON),我也很乐意听听。
1 个回答
1
无论你用什么方式发送POST请求,都应该了解字符编码(除非你想发送二进制数据)。要获取你HTML内容的字符编码,可以参考这个链接: 在Python中获取HTTP响应的字符集/编码的好方法。
如果你想把 post_dict
作为JSON发送,确保里面的所有字符串都是Unicode格式(也就是说,收到HTML后要尽快转换成Unicode),而且在调用 json.dumps()
时不要使用 encoding
参数。因为如果你从不同的网站获取HTML字符串,而这些网站使用不同的编码,这个参数也没什么用。