我正在抓取网络,并且得到了Unicode字符作为原始字符。
我得到\u00f3
而不是得到“ó”字符。
与写相同:
>>>print("\\u00f3")
我想将所有Unicode字符中的"\\u00f3"
转换为"\u00f3"
。是:
"\\uxxxx" -> "\uxxxx"
但是,如果我尝试将\\
替换为\
,则下一个字符将被解释为转义字符。
我该怎么办?
应用下面的代码,我可以转换部分字符:
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'字符。这是因为该方法和任何其他方法都不能在UTF-8中转换\ udxxx字符。对于我来说,它们不是重要角色,所以这不是问题。
感谢您的帮助。
****************************解决了********************** ************
最佳解决方案之前已解决: Python-encoding and decoding using codecs,unicode_escape()
感谢您的帮助。
答案 0 :(得分:0)
首先:也许您未使用正确的字符集对网页进行解码。如果Web服务器不提供字符集,则可能必须在meta标记中找到它或进行有根据的猜测。也许尝试几个常用的字符集并比较结果。
第二:我玩了一段时间的字符串并解码了一段时间,这确实令人沮丧,但是我在format()
中找到了可能的解决方案:
s = "\\u00f3"
print('{:c}'.format(int(s[2:], 16)))
将提取的十六进制值格式化为Unicode似乎可以正常工作。
答案 1 :(得分:0)
您不能将' @ error/constitute.c/ReadImage/509.convert: unable to open image 'roti': No such file or directory @ error/blob.c/OpenBlob/3094.convert: no decode delegate for this image format
替换为'\\'
,因为'\'
不是有效的文字字符串。
将十六进制表达式转换为数字,然后找到相应的字符:
'\'
您可以检查一下是否可以得到所需的结果:
original = '\\u00f3'
char = chr(int(original[2:], base=16))