文档的标点符号转换

https://www.biaodianfu.com/python-convert-between-unicode-fullwidth-halfwidth-characters.html

在文本处理的时候,经常会遇到全角半角不一致的问题。于是需要程序能够快速的在两者之间互转。由于全角半角本身存在着映射关系,所以处理起来并不复杂。具体规则为:

  • 全角字符unicode编码从65281~65374 (十六进制 0xFF01 ~ 0xFF5E)
  • 半角字符unicode编码从33~126 (十六进制 0x21~ 0x7E)
  • 空格比较特殊,全角为 12288(0x3000),半角为 32(0x20)
  • 而且除空格外,全角/半角按unicode编码排序在顺序上是对应的(半角 + 65248 = 全角)

所以可以直接通过用+-法来处理非空格数据,对空格单独处理。

用到的一些函数

  • chr()函数用一个范围在range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
  • ord()函数是chr()函数的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的ASCII数值

所以对输入文本做处理时,要把全角字符转换为半角字符,首先判断空格,然后判断全半角即可:

sstring = '你好,这里是2019年1月31日10:37   】;‘】'

half = ''
for i in sstring:
    if ord(i) == 12288:
        half += chr(32)
    elif 65281 <= ord(i) <= 65374:
        half += chr(ord(i)-65248)
    else:
        half += i
        
print(half)

输出

你好,这里是2019年1月31日10:37   】;‘】

诸如】等特殊字符需要用正则等替换掉,可以用上述方法转换的字符有:

for i in range(33,127):
    print(chr(i),chr(i+65248))


! !
" "
# #
$ $
% %
& &
' '
( (
) )
* *
+ +
, ,
- -
. .
/ /
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
: :
; ;
< <
= =
> >
? ?
@ @
A A
B B
C C
D D
E E
F F
G G
H H
I I
J J
K K
L L
M M
N N
O O
P P
Q Q
R R
S S
T T
U U
V V
W W
X X
Y Y
Z Z
[ [
\ \
] ]
^ ^
_ _
` `
a a
b b
c c
d d
e e
f f
g g
h h
i i
j j
k k
l l
m m
n n
o o
p p
q q
r r
s s
t t
u u
v v
w w
x x
y y
z z
{ {
| |
} }
~ ~

猜你喜欢

转载自blog.csdn.net/weixin_40240670/article/details/86711758