【问题标题】:How to convert a string variable with special characters in Python to print properly如何在 Python 中将带有特殊字符的字符串变量转换为正确打印
【发布时间】:2019-06-17 10:07:59
【问题描述】:

对不起,如果标题令人困惑,但我已经研究了两个小时,不知道我应该如何提出这个问题,所以任何人都可以随意编辑这篇文章。

我有一个使用网络抓取创建的字符串变量,它使用特殊字符,在打印时看起来像“\ud83d\ude00\u0107\u00e7\n hello”,没有引号。问题是我希望它打印实际的特殊字符,但我不确定应该使用哪种编码方法。如果我复制并粘贴确切的字符串并打印它,它可以正常工作,但作为我创建的变量,它不显示特殊字符,只显示文本。

我尝试将其转换为字符串,使用 json.load、unicode-escape、UTF-8 和其他一些方法,但老实说我不确定我应该使用什么方法

page = requests.get('https://www.example.com')
soup = str(BeautifulSoup(page.text, 'html.parser')).splitlines()

for line in soup:
    if 'hello' in line:
        print(line) #produces literal text of \ud83d\ude00\u0107\u00e7 \n hello

print('\ud83d\ude00\u0107\u00e7 \n hello') #produces wanted result

我希望结果看起来像这样:

???????

你好

【问题讨论】:

  • 那些是土耳其字符吗?
  • @Nick 该变量可以包含表情符号和任何其他特殊字符,包括土耳其字符

标签: python beautifulsoup escaping special-characters encode


【解决方案1】:

经过一个小时的反复试验,我发现这就是答案:

line.encode('utf-8').decode('unicode-escape')

【讨论】:

    【解决方案2】:

    a = "\ud83d\ude00\u0107\u00e7 \n hello"

     a.encode('utf-16', 'surrogatepass').decode('utf-16')    
    

    输出:

    '?ćç \n hello'
    

    【讨论】:

    • 感谢您的帮助,但它不起作用,我认为该变量在被网络抓取时采用了某种奇怪的格式。请记住,实际的字符串打印得非常好,但我在网上抓取的变量却没有。
    • 它实际上产生了完全相同的结果。还有其他想法吗?
    猜你喜欢
    • 2020-03-01
    • 2020-01-10
    • 2016-06-09
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多