【问题标题】:Python 2.7 convert special characters into utf-8 byesPython 2.7 将特殊字符转换为 utf-8 字节
【发布时间】:2021-10-24 17:35:11
【问题描述】:

我需要将字符串替换为 URL 以访问不同的 JSON 文件。我的问题是一些字符串有特殊字符,我只需要这些作为 UTF-8 字节,所以我可以正确找到 JSON 表。

一个例子:

# I have this string
a = 'code - Brasilândia'

#in the JSON url it appears as
'code%20-%20Brasil%C3%A2ndia'

我设法使用urllib.quote() 正确转换了空格,但它没有转换我需要的特殊字符。

print(urllib.quote('code - Brasilândia))
'code%20-%20Brasil%83ndia'

当我在 URL 中替换它时,我无法访问 JSON 表。 我设法在字符串 u'code - Brasilândia' 之前使用 u 来完成这项工作,但这并没有解决我的问题,因为字符串最终将成为用户输入,并且需要不断更改。 我尝试了几种方法,但都没有得到我需要的结果。

我专门为这个项目使用了python 2.7,我无法更改它。

有什么想法吗?

【问题讨论】:

    标签: python python-2.7 url special-characters


    【解决方案1】:

    您可以尝试将字符串解码为 UTF-8,如果失败,则假定它是 Latin-1 或您期望的任何 8 位编码。

    try:
        yourstring.decode('utf-8')
    except UnicodeDecodeError:
        yourstring = yourstring.decode('latin-1').encode('utf-8')
    print(urllib.quote(yourstring))
    

    ...前提是您可以建立正确的编码; 0x83 似乎只对应于一些相当模糊的遗留编码,如代码页 437 和 850(这些是最不模糊的)。另见https://tripleee.github.io/8bit/#83 (披露:链接的网站是我的)。

    演示:https://ideone.com/fjX15c

    【讨论】:

    • 非常感谢您的回答。你的想法几乎奏效了。我试过了:a = "code - Brasilândia"print(urllib.quote(a.decode('latin-1').encode('utf-8'))) 我得到了code%20-%20Brasil%C2%83ndia 我猜我的问题可能是 Latin-1 不是正确的。我会尝试其他人。
    • 立即查看更新;就在我正要更新这个答案时,该网站出现了故障。
    • 顺便说一句,这是升级到 Python 3 会带来显着缓解的领域之一。
    • 我绝对同意Python 3,可惜这个项目暂时需要python 2.7
    • 那么问题来了,如果他们可以传入任意输入,你怎么能猜出用户使用的编码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    相关资源
    最近更新 更多