【问题标题】:How to compare unicode and string in Python?如何在 Python 中比较 unicode 和 string?
【发布时间】:2015-12-09 15:39:33
【问题描述】:

我有两个具有以下值的变量(比如xy):

x = u'Ko\u0161ick\xfd'
y = 'Ko\x9aick\xfd'

它们可能以不同的方式编码相同的名称。第一个变量是 unicode,第二个是字符串。

有没有办法将字符串转换为 unicode(或将 unicode 转换为字符串)并检查它们是否真的相同。

我尝试使用encode

x.encode('utf-8')

它返回一些新的东西(第三个版本):

'Ko\xc5\xa1ick\xc3\xbd'

并使用以下内容:

print x.encode('utf-8')

返回另一个版本:

KošickÛ

所以,我完全糊涂了。有没有办法让所有内容保持相同的格式?

【问题讨论】:

  • 你的 y 缺少一些东西...我已经在我的 python IDLE 调试器上检查过了,xKosickyyKoicky(缺少 @987654334 @)。
  • @Neoares 您的 IDLE 似乎缺少正确的字形。 x 在这里是“Košický”。
  • @tripleee 那么没关系 :) 无论如何,你用什么 IDLE?
  • 我根本不使用 Python 附带的简单 IDLE。这是在 OSX 命令行上使用基本的 Python REPL,但我希望在任何现代平台上都有相同的行为(奇怪的是,它似乎仍然排除了 WIndows,或者至少是一些流行版本)。
  • 我相信正确的编码是cp1252 ...

标签: python unicode decode encode


【解决方案1】:

您可以将字节字符串转换为 Unicode,但如果它包含任何非 ASCII 字符,则必须指定编码。

if y.decode('iso-8859-1') == x:
    print(u'{0!r} converted to Unicode == {1}".format(y, x))

对于您给出的示例,这是不正确的;但也许y 的编码不同。

理论上,您可以转换任何一种方式,但一般来说,在内部使用全 Unicode 并将其他编码转换为 Unicode 以在您的代码中使用是有意义的(而不是相反)。

【讨论】:

    【解决方案2】:

    你需要知道字节串的编码。好像是windows-1252:

    x = u'Ko\u0161ick\xfd'
    y = 'Ko\x9aick\xfd'
    
    print x == y.decode('windows-1252')
    print x.encode('windows-1252') == y
    

    输出:

    True
    True
    

    最佳实践是在程序输入时将文本转换为 Unicode,以 Unicode 进行所有处理,然后转换回编码字节以持久存储、在套接字上传输等。

    【讨论】:

      【解决方案3】:

      嗯,utf-8 现在是交换和 Linux 世界中事实上的标准,但还有很多其他编码。

      常见的例子是 latin1、latin9(与 € 符号相同)和 cp1252 是它们的 windows 变体。

      在你的情况下:

      >>> x.encode('cp1252')
      'Ko\x9aick\xfd'
      

      所以y 字符串似乎是cp1252 编码的。

      【讨论】:

        猜你喜欢
        • 2013-11-14
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 2023-01-16
        • 2013-11-26
        • 1970-01-01
        • 2019-01-30
        • 1970-01-01
        相关资源
        最近更新 更多