簡體   English   中英

將全角Unicode字符轉換為ASCII字符

[英]Convert full-width Unicode characters into ASCII characters

我在Unicode中有一些字符串文本,其中包含一些數字,如下所示:

txt = '36fsdfdsf14'

但是, int(txt[: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

在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示例,請注意string和re.U標志前面的'u'。 您可以將問題中現有的str類型變量(例如txt轉換為unicode,即txt.decode('utf8')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM