【问题标题】:How to convert string with unicode to normal text in python如何在python中将带有unicode的字符串转换为普通文本
【发布时间】:2016-04-11 17:16:56
【问题描述】:

我有文字

s = "https://r3---sn-tt17dnel.c.docs.google.com/videoplayback?requiressl\u003dyes\u0026id\u003d2f4d1d2005872ce2\u0026itag\u003d22\u0026source\u003dwebdrive\u0026app\u003dtexmex\u0026"

我需要把它转换成普通的url,比如字符串。

s = "https://r3---sn-tt17dnel.c.docs.google.com/videoplayback?requiressl=yes&id=2f4d1d2005872ce2&itag=22&source=webdrive&app=texmex&"

我试过 s.decode('utf-8') 不起作用。 非常感谢任何帮助。 谢谢

【问题讨论】:

  • 你用的是什么版本的 Python?
  • 说到 char。编码,请务必指定您使用的python版本。
  • @user3166390,如果您将原始字符串设为带有 u".." 前缀的 unicode 字符串,正如我在 my answer 中详述的那样,您无需更改任何内容字符串。考虑到您正在尝试在字符串中使用 unicode 字符,我会说这通常是一个好主意。

标签: python html url unicode


【解决方案1】:

试试这个:

s1= urllib.unquote(s).encode('latin1').decode('unicode_escape')

【讨论】:

  • (s == s1) ==> True 你实际上并没有改变任何东西。
【解决方案2】:

在 python 3 中,它们都是相同的

s = "https://r3---sn-tt17dnel.c.docs.google.com/videoplayback?requiressl\u003dyes\u0026id\u003d2f4d1d2005872ce2\u0026itag\u003d22\u0026source\u003dwebdrive\u0026app\u003dtexmex\u0026"

string_I_want_instead = "https://r3---sn-tt17dnel.c.docs.google.com/videoplayback?requiressl=yes&id=2f4d1d2005872ce2&itag=22&source=webdrive&app=texmex&"

assert s == string_I_want_instead

如果您使用的是 python 2,则需要它们是 unicode 字符串才能使字符正常工作,但仍然通过添加 u"..." 前缀,它们仍然是相同的。

s = u"https://r3---sn-tt17dnel.c.docs.google.com/videoplayback?requiressl\u003dyes\u0026id\u003d2f4d1d2005872ce2\u0026itag\u003d22\u0026source\u003dwebdrive\u0026app\u003dtexmex\u0026"

string_I_want_instead = u"https://r3---sn-tt17dnel.c.docs.google.com/videoplayback?requiressl=yes&id=2f4d1d2005872ce2&itag=22&source=webdrive&app=texmex&"

assert s == string_I_want_instead

【讨论】:

    【解决方案3】:

    Python 3

    url = "https://r3---sn-tt17dnel.c.docs.google.com/videoplayback?requiressl\u003dyes\u0026id\u003d2f4d1d2005872ce2\u0026itag\u003d22\u0026source\u003dwebdrive\u0026app\u003dtexmex\u0026"  
    final_url = url.encode('utf-8').decode()
    if url == final_url:
        print("Both Are Equal")
    

    输出:

    Both Are Equal
    

    正如@TadhgMcDonald-Jensen 指出的那样,它们是相等的,您可以使用您的初始字符串,输出将自动以 utf-8 编码。

    【讨论】:

    • 你也试过print(url)吗?或者更好print(url == final_url)
    【解决方案4】:

    在 Python 3 中,这些字符串是相等的,因此您必须使用 Python 2。您可以使用 unicode_escape 编解码器将 s 转换为 Unicode 字符串,然后使用适当的编解码器将其编码回字节字符串. ascii 在这种情况下可以正常工作:

    #!python2
    s = "https://r3---sn-tt17dnel.c.docs.google.com/videoplayback?requiressl\u003dyes\u0026id\u003d2f4d1d2005872ce2\u0026itag\u003d22\u0026source\u003dwebdrive\u0026app\u003dtexmex\u0026"
    t = "https://r3---sn-tt17dnel.c.docs.google.com/videoplayback?requiressl=yes&id=2f4d1d2005872ce2&itag=22&source=webdrive&app=texmex&"
    print s == t
    print s.decode('unicode-escape').encode('ascii') == t
    

    输出:

    False
    True
    

    【讨论】:

      猜你喜欢
      • 2018-06-08
      • 2016-06-18
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 2016-08-14
      • 2014-12-07
      • 1970-01-01
      • 2021-11-27
      相关资源
      最近更新 更多