从未知字符编码的字符串中转储JSON

4 投票
1 回答
2083 浏览
提问于 2025-04-17 14:06

我正在尝试把网站上的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字符串,而这些网站使用不同的编码,这个参数也没什么用。

撰写回答