Dar*_*Gee 10 python unicode translation
如果这是PHP,我可能会这样做:
function no_more_half_widths($string){
$foo = array('?','?','?','?','?','?','?','?','?','??')
$bar = array('1','2','3','4','5','6','7','8','9','10')
return str_replace($foo, $bar, $string)
}
Run Code Online (Sandbox Code Playgroud)
我在python中尝试过.translate函数,它表明数组的大小不同.我认为这是因为各个字符都是用utf-8编码的.有什么建议?
Dan*_*wby 22
内置unicodedata模块可以做到:
>>> import unicodedata
>>> foo = u'??????????'
>>> unicodedata.normalize('NFKC', foo)
u'1234567890'
Run Code Online (Sandbox Code Playgroud)
"NFKC"代表" 标准化表格 KC [兼容性分解,然后是规范组合]",并用半宽的字符替换全宽字符,这些字符是Unicode等效的.
请注意,它还可以同时对各种其他事物进行标准化,例如单独的重音符号和罗马数字符号.
小智 5
在Python3中,您可以使用以下代码段。它在所有ascii字符及其对应的全角字符之间建立了映射。最棒的是,这不需要您硬键入ascii序列,这很容易出错。
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
FULL2HALF = dict((i + 0xFEE0, i) for i in range(0x21, 0x7F))
FULL2HALF[0x3000] = 0x20
def halfen(s):
'''
Convert full-width characters to ASCII counterpart
'''
return str(s).translate(FULL2HALF)
Run Code Online (Sandbox Code Playgroud)
同样,使用相同的逻辑,您可以将半角字符转换为全角字符,以下代码显示了窍门:
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
HALF2FULL = dict((i, i + 0xFEE0) for i in range(0x21, 0x7F))
HALF2FULL[0x20] = 0x3000
def fullen(s):
'''
Convert all ASCII characters to the full-width counterpart.
'''
return str(s).translate(HALF2FULL)
Run Code Online (Sandbox Code Playgroud)
注意:这两个代码段仅考虑ascii字符,不会转换任何日文/韩文全角字符。
Range
U+FF01–FF5E将ASCII 21到7E字符复制为全角形式,即CJK计算中使用的固定宽度形式。这对于在CJK环境中排版拉丁字符很有用。U+FF00不对应于全角ASCII 20(空格字符),因为该角色已经由U+3000“表意空格”承担。范围
U+FF65–FFDC编码片假名和韩文字符的半角形式。范围
U+FFE0–FFEE包括全角和半角符号。
还有更多,python2解决方案可以参考gist / jcayzac