如何强制html解析json字符串或如何修复&#34; \ xfc&#34;在Python中的<type'str'=“”>中</type>

时间:2014-07-12 15:38:08

标签: python python-2.7

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

我已经尝试过了

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

但没有成功。谁能引导我走向正确的方向?

谢谢!

更新

问题尚未解决。以下是有关此问题的更多信息......

我从外部源接收一个json字符串,其中包含html以及其他一些东西。由于json结构经常变化,我想用“暴力方法”访问带有xpath的html。

所以我想用漂亮的汤。

为此,我将json字符串传递给json.loads(),将其转换为对象。然后我将json对象强制转换为普通字符串并将其传递给美丽的汤。

这种方法非常有效,除了特殊字符,如ßäüöÄÜ。

解决这个问题的最佳方法是什么?

这是一些伪代码

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

这是美丽汤的典型结果(参见 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 :(得分: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从bytestrings转到unicode
  • encode从unicode转到bytestrings

Bytestrings(Python 2中的str,Python 3中的bytes)是用于输入(例如HTML)和输出(例如控制台)的内容。 Unicode(Python 2中的unicode,Python 3中的str)是您应该在程序中使用的。

答案 1 :(得分:0)

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

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