>>> import unicodedata >>> print(unicodedata.lookup('LEFT CURLY BRACKET')) { >>> print(unicodedata.lookup...>>> import unicodedata >>> print(unicodedata.name('{')) LEFT CURLY BRACKET >>> print(unicodedata.name...>>> import unicodedata >>> print(unicodedata.decimal('7')) 7 >>> print(unicodedata.decimal('7a')) Traceback...>>> import unicodedata >>> print(unicodedata.digit('9', None)) 9 >>> print(unicodedata.digit('9a', None...>>> import unicodedata >>> print(unicodedata.numeric('四', None)) 4.0 >>> print(unicodedata.numeric('8
为了修正这个问题,你可以使用unicodedata模块先将文本标准化: >>> import unicodedata >>> t1 = unicodedata.normalize('NFC', s1)...>>> t2 = unicodedata.normalize('NFC', s2) >>> t1 == t2 True >>> print(ascii(t1)) 'Spicy Jalape\xf1o'...>>> t3 = unicodedata.normalize('NFD', s1) >>> t4 = unicodedata.normalize('NFD', s2) >>> t3 == t4 True...how the combined letters are broken apart here >>> unicodedata.normalize('NFKD', s) 'fi' >>> unicodedata.normalize...t1 if not unicodedata.combining(c)) 'Spicy Jalapeno' >>> 最后一个例子展示了 unicodedata 模块的另一个重要方面,也就是测试字符类的工具函数
unicodedata.digit("2") # 2 unicodedata.decimal("2") # 2 unicodedata.numeric("2") # 2.0 unicodedata.digit...("2") # 2 unicodedata.decimal("2") # 2 unicodedata.numeric("2") # 2.0 unicodedata.digit(b"3") #...(b"3") # TypeError: must be str, not bytes unicodedata.digit("Ⅷ") # ValueError: not a digit unicodedata.decimal...("Ⅷ") # ValueError: not a decimal unicodedata.numeric("Ⅷ") # 8.0 unicodedata.digit("四") # ValueError...: not a digit unicodedata.decimal("四") # ValueError: not a decimal unicodedata.numeric("四") # 4.0 #"
Compatibility Composition NFKD: Normalization Form Compatibility Decomposition 我们可以用下面的代码进行实验: import unicodedata...print ('NFC: ' + unicodedata.normalize('NFC', string)) print ('NFD: ' + unicodedata.normalize('NFD',...string)) print ('NFKC: ' + unicodedata.normalize('NFKC', string)) print ('NFKD: ' + unicodedata.normalize...我们来构造一个实验环境: from flask import Flask, abort, request import unicodedata from waf import waf app = Flask...403 Forbidden Forbidden XSS Detected 但是因为我们规范的不同,导致了一下绕过的存在: name = unicodedata.normalize
(char), '5.2f'), # unicodedata.name(char), # sep='\t') END NUMERICS_DEMO...import string def shave_marks(txt): """Remove all diacritic marks""" norm_txt = unicodedata.normalize...('NFD', txt) # shaved = ''.join(c for c in norm_txt if not unicodedata.combining(c)) # return...(txt): """Remove all diacritic marks from Latin base characters""" norm_txt = unicodedata.normalize...('NFD', txt) # latin_base = False keepers = [] for c in norm_txt: if unicodedata.combining(c
unicodedata.digit("2") # 2 unicodedata.decimal("2") # 2 unicodedata.numeric("2") # 2.0 unicodedata.digit...("2") # 2 unicodedata.decimal("2") # 2 unicodedata.numeric("2") # 2.0 unicodedata.digit(b"3") #...(b"3") # TypeError: must be str, not bytes unicodedata.digit("Ⅷ") # ValueError: not a digit unicodedata.decimal...("Ⅷ") # ValueError: not a decimal unicodedata.numeric("Ⅷ") # 8.0 unicodedata.digit("四") # ValueError...: not a digit unicodedata.decimal("四") # ValueError: not a decimal unicodedata.numeric("四") # 4.0
规范化文本匹配 unicodedata.normalize(form,unistr) ?...normalize import unicodedata def nfc_equal(s1, s2): print(unicodedata.normalize('NFC', s1))...print(unicodedata.normalize('NFC', s2)) return unicodedata.normalize('NFC', s1) == unicodedata.normalize...('NFC', s2) def fold_equal(s1, s2): print(unicodedata.normalize('NFC', s1).casefold()) print...(unicodedata.normalize('NFC', s2).casefold()) return unicodedata.normalize('NFC', s1).casefold()
返回大写形式的名称 unicodeata.name('A') snowman.encode('utf-8') #指定字符编码 #验证ASCII def unicode_test(value): import unicodedata... name = unicodedata.name(value) value2 = unicodedata.lookup(name) print('value="%s", name="%...s", value2="%s"' % (value, name, value2)) unicode_test('A') unicode_test('\u2603') #雪人 unicodedata.name...('\u00e9') #用编码值查询字符名称 unicodedata.lookup('LATIN SMALL LETTER E WITH ACUTE') #根据字符查询编码值,要去掉逗号,后变前 但当需要与外界进行数据交互时则
Python已经自带了一个转换的模块,叫做unicodedata,通过它,我们可以把非标准的Unicode字符转成标准的Unicode字符,例如: >>> import unicodedata >>>...unicodedata.normalize('NFKC', '?')...'f' >>> unicodedata.normalize('NFKC', '?') == 'f' True 可以看到,手写字符?...大家应该还记得我之前讲康熙字符那篇文章:康熙部首导致的字典查询异常我们可以使用相同的方式,把康熙部首里面的⽐转换为标准的汉字比: >>> unicodedata.normalize('NFKC', '⽐
/usr/bin/python3 import sys import unicodedata s = "Zhào Qián Sūn Lǐ Zhōu Wú Zhèng Wáng" remap = {...\r a = s.translate(remap) ''' 通过使用dict.fromkeys() 方法构造一个字典,每个Unicode 和音符作为键,对于的值全部为None 然后使用unicodedata.normalize...unicodedata.combining:将分配给字符chr的规范组合类作为整数返回。 如果未定义组合类,则返回0。...''' cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode) if unicodedata.combining(chr(c))) #此部分建议拆分开来理解...b = unicodedata.normalize('NFD', a) ''' 调用translate 函数删除所有重音符 ''' print(b.translate(cmb_chrs
- netloc2 = unicodedata.normalize('NFKC', netloc) - if netloc == netloc2: - return -...为了修正这个问题,你可以使用unicodedata模块先将文本标准化: >>> import unicodedata >>> t1 = unicodedata.normalize('NFC', s1)...>>> t3 = unicodedata.normalize('NFD', s1) >>> t4 = unicodedata.normalize('NFD', s2) >>> t3 == t4 True...how the combined letters are broken apart here >>> unicodedata.normalize('NFKD', s) 'fi' >>> unicodedata.normalize...import unicodedata netloc2 = unicodedata.normalize('NFKC', netloc) if netloc == netloc2: return
可以使用 unicodedata.category(c) 来查看 c 的 Unicode 类别。...text = unicodedata.normalize("NFD", text) output = [] for char in text: cat = unicodedata.category...text = unicodedata.normalize("NFD", text) output = [char for char in text if unicodedata.category...= 'Mn'] return "".join(output) 这段代码核心就是 unicodedata.normalize 和 unicodedata.category 两个函数。...就可以把这两者拆分出来: >>> import unicodedata # unicodedata 是内置库 >>> s = 'āóǔè' >>> s_norm = unicodedata.normalize
最近遇到unicodedata模块,才知道它的一个应用。某些字符能够用多个合法的编码表示,这就会导致一些问题。...Out[6]: False 我们期望上面的字符ñ在两种表示下是相等的,这就需要使用unicodedata...模块,将这些字符标准化: s1='\u00f1' s2='n\u0303' t1 = unicodedata.normalize('NFC', s1) t2 = unicodedata.normalize
主要是去除掉换行符、空格、制表符以及无效的字符: import collections import re import unicodedata import six def clean_br(text...if char == "\t" or char == "\n" or char == "\r": return False cat = unicodedata.category(...if char == " " or char == "\t" or char == "\n" or char == "\r": return True cat = unicodedata.category
translate把其转换成字符串 print(s.translate(str.maketrans('abcxyz', 'xyzabc'))) 去掉unicode字符中音调 import sys import unicodedata...\f, \r a = s.translate(remap) ''' 通过使用dict.fromkeys() 方法构造一个字典,每个Unicode 和音符作为键,对于的值全部为None 然后使用unicodedata.normalize...unicodedata.combining:将分配给字符chr的规范组合类作为整数返回。如果未定义组合类,则返回0。...''' cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode) if unicodedata.combining(chr(c))) #此部分建议拆分开来理解...b = unicodedata.normalize('NFD', a) ''' 调用translate 函数删除所有重音符 ''' print(b.translate(cmb_chrs))
/usr/bin/python3 import sys import unicodedata s = "Zhào Qián Sūn Lǐ Zhōu Wú Zhèng Wáng" remap = {...\f, \r a = s.translate(remap) ''' 通过使用dict.fromkeys() 方法构造一个字典,每个Unicode 和音符作为键,对于的值全部为None 然后使用unicodedata.normalize...unicodedata.combining:将分配给字符chr的规范组合类作为整数返回。 如果未定义组合类,则返回0。...''' cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode) if unicodedata.combining(chr(c))) #此部分建议拆分开来理解...b = unicodedata.normalize('NFD', a) ''' 调用translate 函数删除所有重音符 ''' print(b.translate(cmb_chrs)) 转子
float(s) return True except ValueError: pass try: import unicodedata...unicodedata.numeric(s) return True except (TypeError, ValueError): pass
\t, \f, \ra = s.translate(remap)''' 通过使用dict.fromkeys() 方法构造一个字典,每个Unicode 和音符作为键,对于的值全部为None 然后使用unicodedata.normalize...unicodedata.combining:将分配给字符chr的规范组合类作为整数返回。 如果未定义组合类,则返回0。'''...cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode) if unicodedata.combining(chr(c))) #此部分建议拆分开来理解...b = unicodedata.normalize('NFD', a)''' 调用translate 函数删除所有重音符'''print(b.translate(cmb_chrs))
领取专属 10元无门槛券
手把手带您无忧上云