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

时间:2013-01-29 19:49:53

标签: python json serialization unicode iso

我正在尝试将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 个答案:

答案 0 :(得分:1)

您应该知道字符编码,而不管用于发送POST请求的媒体类型(除非您要发送二进制blob)。要获取html内容的字符编码,请参阅 A good way to get the charset/encoding of an HTTP response in Python

要将post_dict作为json发送,请确保其中的所有字符串都是Unicode(只要您收到它就将html转换为Unicode),并且不要使用encoding参数{ {1}}致电。如果不同的网站(您获取html字符串的地方)使用不同的编码,该参数也无法帮助您。