Python。将“\\uxxx”替换为“\uxxx”

2024-10-01 15:41:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我在抓取一个网页,得到的是原始的Unicode字符。 我得到的不是“o”字符,而是\u00f3。在

它与写入相同:

>>>print("\\u00f3")

我想将"\\u00f3"转换成所有unicode字符的"\u00f3"。它是:

^{pr2}$

但是,如果我试图用\\替换\,接下来的字符将被解释为转义字符。在

我该怎么做?在


应用下一个代码,我可以转换部分字符:

def raw_to_utf8(matcher): 
    string2convert = matcher.group(0)
    return(chr(int(string2convert[2:],base=16)))

def decode_utf8(text_raw):
   text_raw_re=re.compile(r"\\u[0-9a-ce-z]\w{0,3}")
   return text_raw_re.sub(raw_to_utf8, text_raw)

text_fixed = decode_utf8(text_raw)

正如您在正则表达式模式中看到的,我跳过了'd'字符。这是因为\udxxx字符无法通过此方法和任何其他方法转换为UTF-8。他们对我来说不是重要的角色,所以这不是问题。在

谢谢你的帮助。在

*******************已解决*************************************

最好的解决方案是先前解决的: Python-encoding and decoding using codecs,unicode_escape()

谢谢你的帮助。在


Tags: to方法textre网页rawreturndef
2条回答

第一:也许你没有用正确的字符集解码网页。如果web服务器没有提供字符集,那么您可能需要在meta标记中找到它,或者进行有根据的猜测。也许可以尝试一些常用的字符集并比较结果。在

第二:我玩了一段时间的字符串和解码,这确实令人沮丧,但我在format()中找到了一个可能的解决方案:

s = "\\u00f3"
print('{:c}'.format(int(s[2:], 16)))

将提取的十六进制值格式化为unicode似乎可以工作。在

不能将'\\'替换为'\',因为'\'不是有效的文本字符串。在

将十六进制表达式转换为数字,然后找到相应的字符:

original = '\\u00f3'
char = chr(int(original[2:], base=16))

您可以检查这是否会产生所需的结果:

^{pr2}$

相关问题 更多 >

    热门问题