在使用str.center()时遇到unicode字符的问题
我注意到在 python 2.7
中,str
对象的 center
方法有些奇怪的行为 -
>>> print '-'.center(5,'.') # '-' is the minus or hyphen key on the keyboard.
..-.. # correctly centered
>>> print '─'.center(5, '.') # '─' is NOT the minus or hyphen key on the keyboard.
.─. # incorrectly centered
这是 center
方法的实现有问题,还是跟使用 unicode 字符有关呢?
我该怎么解决这个问题?
[注意,这在 python 3.2
中运行得很好]
2 个回答
2
在编程中,有时候我们需要处理一些数据,这些数据可能来自不同的地方,比如用户输入、文件或者网络请求。为了让程序能够理解这些数据,我们需要把它们转换成程序能用的格式。这种转换的过程就叫做“解析”。
解析的方式有很多种,具体取决于数据的类型和来源。例如,如果我们从一个网页上获取数据,可能需要把网页的内容提取出来,变成我们可以使用的格式。又或者,如果我们从一个文件中读取数据,可能需要根据文件的格式来解析里面的内容。
总之,解析就是把复杂的数据变得简单易懂,让程序能够顺利地使用这些数据。
print '─'.decode('utf-8').center(5, '.')
# returns: '..─..'
3
在Python 2中,str
和unicode
是两种不同的类型。str
是字节的序列,用普通的引号创建。比如你的'─'
就是一个包含3个字节的序列,它显示为一个单独的unicode字符。当你用str.center()
方法让这些字节在5个字节宽的区域中居中时,它会在两边各加一个字节;但是打印出来时你只会看到3个字符。
如果你创建一个unicode
对象(用u'─'
或者'─'.decode('utf-8')),那么你就有了一个包含1个unicode字符的序列,这样在居中时会在两边各加2个字符。
在Python 3中就没有这个问题,因为普通字符串就是unicode字符的序列。