【问题标题】:string split containing Umlaut ä in python 2.7python 2.7中包含变音符号ä的字符串拆分
【发布时间】:2016-05-06 23:19:49
【问题描述】:

我正在尝试拆分包含元音变音 ä(德语字符)的字符串,但拆分后它是编码的元音变音字符。请看下文。

>>> k = 'A|B|C|AT|Dxbensäce|S|'  
>>> re.split('\|\w+\|',k)  

['A', 'C', 'Dxbens\xc3\xa4ce', '']

我需要得到如下输出:
['A', 'C', 'Dxbensäce', '']

请提出建议。

我需要再补充一点。
我需要将上面的字符串拆分并存储到列表中,并将此值与其他列表值进行比较(将相同的值添加到第二个列表中)。
由于第一个列表值转换为 unicode 比较失败。
注意:这里我没有打印值。我知道通过使用 print 我会得到正确的变音符号值。 第一个列表值使用拆分语句填充,第二个列表值应为硬编码值。

【问题讨论】:

    标签: python python-2.7 unicode


    【解决方案1】:

    您的问题直接在于您对字符串和编码的处理,而不是拆分:

    In [1]: k = 'A|B|C|AT|Dxbensäce|S|'  
    In [3]: k
    Out[3]: 'A|B|C|AT|Dxbens\xc3\xa4ce|S|'
    In [9]: print(k)
    A|B|C|AT|Dxbensäce|S|
    

    【讨论】:

      【解决方案2】:
      1. 使用unicode 类型来处理文本而不是字节串(Python 2 上的str)。使用u'' unicode 文字或在模块顶部添加from __future__ import unicode_literals
      2. 不要混淆对象及其文本表示 (repr())。 打印 Python 列表在其项目上调用 repr()。要以 ascii 字符显示不可打印的字符(在 Python 2 上),请自行格式化列表,例如:

        print ":".join(some_list)
        

      无关:如果您的 Python 源代码中有非 ascii 文字字符(例如,u'ä'),那么您应该确保您的编辑器/IDE 尊重编码声明(顶部的# -*- coding: utf-8 -*- 行)并且它使用保存Python源文件的指定字符编码。

      这是一个完整的代码示例:

      #!/usr/bin/env python
      # -*- coding: utf-8 -*-
      from __future__ import print_function, unicode_literals
      
      L = ['A', 'C', 'Dxbensäce', '']
      print(*L, sep=':')
      

      输出

      A:C:Dxbensäce:
      

      【讨论】:

        猜你喜欢
        • 2021-03-20
        • 1970-01-01
        • 2020-04-06
        • 1970-01-01
        • 1970-01-01
        • 2013-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多