在Python中将unicode字符串压缩在一起

Ben*_*age 1 python string unicode permutation

我有字符串:

a = "ÀÁÂÃÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜ" b = "àáâãäèéçêëìíîïòóôõöùúûüÿ"
Run Code Online (Sandbox Code Playgroud)

我想创建字符串

"ÀàÁáÂâ..."
Run Code Online (Sandbox Code Playgroud)

即将绳子分成两半然后将两半拉在一起.

我尝试了天真zip(a, b)但这不起作用.我认为这是由于unicode的问题.

有谁知道我怎么能得到我想要的结果?

Bou*_*oud 5

在Python 2.x中,默认情况下字符串不是unicode.处理unicode数据时,您必须执行以下操作:

  • u字符的前缀字符串文字:a = u'ÀÁÂÃÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜ',或

  • 如果你想避免使用u前缀,并且你正在使用的模块是否足够兼容,请使用from __future__ import unicode_literalsimport来将字符串文字默认解释为unicode

  • 如果直接在Python代码中编写unicode字符串文字,请utf-8格式保存.py文件,以便正确解释文字.Python 2.3+将解释utf-8 BOM ; 一个好的做法是在文件的开头添加一个特定的注释行来表示编码# -*- coding: utf-8 -*-,或者

  • 您还可以继续保存.py文件ascii,但是您需要转义文字中的unicode字符,这些字符可能性较差:'ÀÁÂÃ'应该变为'\xc0\xc1\xc2\xc3'

一旦满足这些条件,剩下的就是在这些unicode字符串上应用算法,就像使用str版本一样.以下是__future__导入问题的一种可能解决方案:

from __future__ import unicode_literals

from itertools import chain
a = "ÀÁÂÃÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜ"
b = "àáâãäèéçêëìíîïòóôõöùúûüÿ"

print ''.join(chain(*zip(a,b)))

>>> ÀàÁáÂâÃãÈäÉèÊéËçÌêÍëÎìÏíÒîÓïÔòÕóÖôÙõÚöÛùÜú
Run Code Online (Sandbox Code Playgroud)

进一步参考:

  • PEP 263定义了非ascii编码注释
  • PEP 3120将utf-8定义为Python 3中的默认编码