如何暴力破解 html 解析 json 字符串或如何在 Python 中修复<类型"str">中的"xfc"



我有一个<type 'str'>变量包含一些html。我的问题是,当打印到控制台时,特殊字符被编码为"xfc"而不是"ü"

我已经试过了

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

但没有成功。有人能给我指路吗?

谢谢!

更新:

这个问题还没有解决。以下是关于这个问题的更多信息……

我正在接收一个json字符串从一个外部源包含html除了一些其他的东西。我想访问html与xpath在一个"蛮力的方法",因为json结构经常变化。

所以我想用漂亮的汤。

为此,我将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 fxfcr Belgien)

 <div class="sr_color">
          <div style="float:left">
           <a class="sr_color" href="">
            Haus fxfcr 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>

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)是你应该在程序中使用的。

您确定您的控制台支持unicode吗?Python可以很好地处理该字符,但是在打印它时,您的终端可能无法正确解释它。尝试将字符串写入文件并使用支持unicode的编辑器打开它(或者甚至是html文件并在浏览器中打开它)。

大多数终端仿真器支持多种编码,可以在它们的选项中设置(取决于所讨论的终端仿真器)。

相关内容

最新更新