【问题标题】:How to replace " \\u0027 " by " ' " in python?如何在python中用“'”替换“\\u0027”?
【发布时间】:2020-07-03 01:00:23
【问题描述】:

我是 python 新手,我正在尝试编写一个爬虫程序。

首先,我将这种字符串提取到一个变量中(我们称之为data[1],因为它包含在一个数组中):

\"描述\":\"Alors qu\\u0027ils montaient dans l\\u0027un des couloirs du versant nord du Hohneck (\\"le Premier couloir \u00E0 droite\\"), deux alpinistes ont d\u00E9clench\u00E9 une 牌匾等 \u00E9t\u00E9 出口\u00E9s tous les deux。 L\\u0027un 血清 enseveli et l\\u0027autre ne pourra d\u00E9clencher l\\u0027alerte qu\\u0027\u00E0 拉夜。 La victime ne sera retrouv\u00E9e que d\u00E9but avril. \u003cbr\u003e Sur la Photo Prize en f\u00E9vrier 2011, le trac\u00E9 近似值 de l\\u0027avalanche a \u00E9t\u00E9 repr\u00E9sent\u00E9.\",

然后,我使用:

data = data[1].encode().decode('unicode-escape')

但它给了我:

"description":"Alors qu\u0027ils montaient dans l\u0027un des couloirs du versant nord du Hohneck (\"le Premier couloir à droite\"), deux alpinistes ont déclenché une 牌匾和 ont été emportés tous les deux。 L\u0027un sera enseveli et l\u0027autre ne pourra declencher l\u0027alerte qu\u0027à la nuit。 La victime ne sera retrouvée que 艾薇儿出道。 \u003cbr\u003e Sur la Photo Prize en février 2011, le tracé approximatif de l\u0027avalanche a été représenté。",

确实,带有重音符号的字符已被替换,但撇号未处理! 看来这两个反斜杠是原因。

我尝试了几种方法: 比如解码两次,然后“\u0027”变成“'”,但是“é”变成“é”。

data.replace('é', 'é')data.replace(u'\u0027', u'é') 不工作

那么,你知道我该如何解决这个问题吗?

【问题讨论】:

  • 我认为编码是不同的,你可以做.encode('unicode-escape').decode('unicode-escape') 还是让默认编码用于编码/解码,看看它是否有效?
  • 听起来您正在尝试手动处理 JSON。您应该使用 JSON 解析器来解析 JSON,例如内置的 json 模块。
  • 从你之前的问题看网站,看起来你有一个包含JSON的Javascript字符串文字,所以你需要解析它所代表的JSON字符串的Javascript字符串文字,然后解析JSON使用 JSON 解析器。
  • @yayg,两个命题(使用 'unicode-escape' 或空的编码和解码)导致相同的结果,输入和输出字符串之间没有变化。

标签: python string unicode escaping encode


【解决方案1】:

问题已解决!

正如 user2357112 支持 Monica 所说,我尝试手动处理 json。 但是这样做:

data = html_page.find_all("script")
data = re.findall("(?<=JSON\.parse\(')[A-Za-z0-9'.?!/+=;:,()\\\ \"\-{_àâçéèêëíìîôùûæœÁÀÂÃÇÉÈÊËÍÌÎÔÙÛ©´<>]*", str(data))

data = data[0].encode().decode('unicode-escape') + "\"\"}"    
data_dict = json.loads(data)
string_data_dict = json.dumps(data_dict)

for cle, val in data_dict.items() :
    print(cle + " : " + str(val))

解决了这个问题。

使用此代码,输入字符串如下:

<script>
var admin = false;
var avalanche = JSON.parse('{...\"description\":\"Alors qu\\u0027ils montaient dans l\\u0027un des couloirs du versant nord du Hohneck (\\\"le premier couloir \u00E0 droite\\\"), deux alpinistes ont d\u00E9clench\u00E9 une plaque et ont \u00E9t\u00E9 emport\u00E9s tous les deux. L\\u0027un sera enseveli et l\\u0027autre ne pourra d\u00E9clencher l\\u0027alerte qu\\u0027\u00E0 la nuit. La victime ne sera retrouv\u00E9e que d\u00E9but avril. \\u003cbr\\u003e Sur la photo prise en f\u00E9vrier 2011, le trac\u00E9 approximatif de l\\u0027avalanche a \u00E9t\u00E9 repr\u00E9sent\u00E9.\",...

给出如下输出:

...
description : Alors qu'ils montaient dans l'un des couloirs du versant nord du Hohneck ("le premier couloir à droite"), deux alpinistes ont déclenché une plaque et ont été emportés tous les deux. L'un sera enseveli et l'autre ne pourra déclencher l'alerte qu'à la nuit. La victime ne sera retrouvée que début avril. <br> Sur la photo prise en février 2011, le tracé approximatif de l'avalanche a été représenté.
...

谢谢。

【讨论】:

    猜你喜欢
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 2021-10-25
    • 2012-03-18
    相关资源
    最近更新 更多