将中文字符转换为XML/HTML数值实体和Unicode UTF-8?

2 投票
1 回答
1398 浏览
提问于 2025-04-18 12:36

我有一些英文单词和中文字符的混合文本,我想把这些文本转换成英文单词和中文字符的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

撰写回答