将全角Unicode字符转换为ASCII字符

时间:2018-06-08 07:53:26

标签: python python-2.7 unicode ascii

我在unicode中有一些字符串文本,包含一些数字如下:

txt = '36fsdfdsf14'

但是,int(txt[:2])无法将字符识别为数字。如何更改字符以将其识别为数字?

2 个答案:

答案 0 :(得分:2)

如果您实际拥有Unicode(或将您的字节字符串解码为Unicode),那么您可以使用规范替换来规范化数据:

>>> s = u'36fsdfdsf14'
>>> s
u'\uff13\uff16fsdfdsf\uff11\uff14'
>>> import unicodedata as ud
>>> ud.normalize('NFKC',s)
u'36fsdfdsf14'

如果规范规范化对您来说变化太大,您可以创建一个只包含所需替换项的转换表:

#coding:utf8

repl = u'0123456789'

# Fullwidth digits are U+FF10 to U+FF19.
# This makes a lookup table from Unicode ordinal to the ASCII character equivalent.
xlat = dict(zip(range(0xff10,0xff1a),repl))

s = u'36fsdfdsf14'

print(s.translate(xlat))

输出:

36fsdfdsf14

答案 1 :(得分:0)

在python 3上

[int(x) for x in re.findall(r'\d+', '36fsdfdsf14')]
# [36, 14]

在python 2上

[int(x) for x in re.findall(r'\d+', u'36fsdfdsf14', re.U)]
# [36, 14]

关于python 2示例,请注意' u'在字符串前面和re.U标志。您可以将问题中现有的str类型变量(例如txt)转换为unicode txt.decode('utf8')