如何暴力解析JSON字符串中的HTML或在Python中修复"<type 'str'>"中的"\xfc

0 投票
2 回答
624 浏览
提问于 2025-04-18 13:04

我有一个 <type 'str'> 类型的变量,里面包含了一些 HTML 内容。我的问题是,当我在控制台打印出来时,特殊字符被编码成了 "\xfc",而不是我想要的 "ü"

我已经尝试过

html = html.encode('utf-8').decode('string_escape')

但没有成功。有没有人能给我一些正确的方向?

谢谢!

更新:

问题还没有解决。这是一些关于问题的更多信息……

我从外部来源收到一个 JSON 字符串,里面除了其他内容还有 HTML。我想用 xpath 来访问这些 HTML,因为 JSON 的结构经常变化,所以我打算用一种“蛮力”的方法。

所以我决定使用 Beautiful Soup。

为此,我把 JSON 字符串传给 json.loads(),这样就把它变成了一个对象。然后我把这个 JSON 对象转换成普通字符串,再传给 Beautiful Soup。

这个方法效果不错,但对于像 ßäüöÄÜÖ 这样的特殊字符就不行了。

有什么好的方法可以解决这个问题吗?

这是一些伪代码

data = json.loads(jsonstring)
html = str(data) 
soup = BeautifulSoup(data)
html = soup.prettify()
html = "<html><head><meta charset='UTF-8'></head>" + html + "</body></html>"

print type(html)
print html

这是 Beautiful Soup 返回的一个典型结果(看看 Haus f\xfcr Belgien

 <div class="sr_color">
          <div style="float:left">
           <a class="sr_color" href="">
            Haus f\xfcr Belgien
           </a>
           :
           <span>
            <span class="sr_num_color">
             5,0
            </span>
            <span style="display:-moz-inline-box;display:inline-block;float:none;vertical-align:-1px" class="star">
             <span style="width:65px">
              &nbsp;
             </span>
            </span>
           </span>
          </div>
         </div>

2 个回答

0

你确定你的控制台支持unicode吗?Python可能处理这个字符没问题,但当它要显示出来的时候,你的终端可能就无法正确理解了。你可以试着把这个字符串写入一个文件,然后用支持unicode的编辑器打开它(或者写成一个html文件,用浏览器打开)。

大多数终端模拟器支持多种编码方式,你可以在它们的设置选项中进行调整(具体取决于你使用的终端模拟器)。

2

\xfcülatin1 编码中的表示方式。

首先,把你的 HTML 解码成 Unicode,然后用适合你控制台的编码来打印出来:

u = html.decode('latin1')  # u is an unicode string
print u.encode('utf-8')    # u.encode('utf-8') is a bytestring, encoded in utf-8

请注意:

  • decode 是把字节串转换成 Unicode
  • encode 是把 Unicode 转换成字节串

字节串(在 Python 2 中是 str,在 Python 3 中是 bytes)是你用来输入(比如你的 HTML)和输出(比如你的控制台)的东西。Unicode(在 Python 2 中是 unicode,在 Python 3 中是 str)是你在程序中应该使用的格式。

撰写回答