将中文字符转换为XML/HTML数值实体和Unicode UTF-8?
我有一些英文单词和中文字符的混合文本,我想把这些文本转换成英文单词和中文字符的XML/HTML风格的数字实体混合。
比如,下面这个包含英文单词、数字和中文字符的例子:
Title: 目录.doc
Level: 1
PageNumber: 1
Begin
Title: 1 C语言概述
Level: 1
PageNumber: 13
BeginTitle: 1.1 C语言的发展过程
Level: 2
PageNumber: 13
Begin
Title: 1.2 当代最优秀的程序设计语言
会被转换成这样,中文字符会被它们的XML/HTML风格的数字实体替换:
Title: 目录.doc
Level: 1
PageNumber: 1
Begin
Title: 1 C语言概述
Level: 1
PageNumber: 13
Begin
Title: 1.1 C语言的发展过程
Level: 2
PageNumber: 13
Begin
Title: 1.2 当代最优秀的程序设计语言
我想知道我能不能用Python来编写这个程序?
还有,能不能编写一个程序把中文字符转换成它们的Unicode UTF-8编码?
提前谢谢你们!
1 个回答
1
如果 s
是一个unicode字符串,你可以用 s.encode('ascii', 'xmlcharrefreplace')
来处理它。
在Python 2中,你可以试试 s.decode('utf_8').encode('ascii', 'xmlcharrefreplace')
。
这个方法在Python 3中也能用。
s = '''
Title: 目录.doc
Level: 1
PageNumber: 1
Begin
Title: 1 C语言概述
Level: 1
PageNumber: 13
BeginTitle: 1.1 C语言的发展过程
Level: 2
PageNumber: 13
Begin
Title: 1.2 当代最优秀的程序设计语言
'''
print(s.encode('ascii', 'xmlcharrefreplace').decode('utf_8'))
另外,你也可以自己写代码来实现这个功能。
res = []
for b in s:
o = ord(b)
if o > 255:
res.append('&#{};'.format(o))
else:
res.append(b)
res_string = ''.join(res)
print(res_string)
这两种方法的输出结果是一样的:
Title: 目录.doc
Level: 1
PageNumber: 1
Begin
Title: 1 C语言概述
Level: 1
PageNumber: 13
BeginTitle: 1.1 C语言的发展过程
Level: 2
PageNumber: 13
Begin
Title: 1.2 当代最优秀的程序设计语言
你可以使用 ord()
函数来获取unicode编码。
c = '录'
code = ord(c)
print(code, hex(code))
输出结果:
24405 0x5f55