将 unicode 符号转换为 unicode 实体

Convert unicode symbol to unicode entity

我一直在寻找关于如何将 Unicode 符号 (ἔ) 转换为对应的 Unicode 实体 (ἔ) 的合适解决方案。我有一个文本文件,其中包含很多类似 ῶἤÜὰὔ 的符号。我正在寻找一个 python 甚至 Perl 脚本,它可以将文件作为参数并处理每个符号并将其等效的 Unicode 实体写入输出文件。我看到了类似的问题 here 但它正在处理 html 实体。

perl -Ci -0777 -E 'print map {sprintf "&#x%04x;", ord $_} split(//,<>)' foo.txt

Python 3.3+:

#coding: utf8
import re
s = 'abcῶἤÜὰὔdef'
s = re.sub(r'[\x80-\U0010FFFF]', lambda x: '&#x{:04X};'.format(ord(x.group(0))), s)
print(s)
  • re.sub 使用正则表达式和替换函数。
  • r'[\x80-\U0010FFFF]' 匹配单个非 ASCII Unicode 字符。
  • lambda x: '&x{:04X};'.format(ord(x.group(0))) 是一个接收正则表达式匹配的匿名函数。 x 是匹配对象。 x.group(0) 是匹配的子串。 ord 给出字符的 Unicode 序号,format 生成所需的 html 实体字符串作为替换。 lambda 表达式等价于函数:
    def replacement(matchobj):
        substring = matchobj.group(0)
        unicode_value = ord(substring)
        return '&x{:04X};'.format(unicode_value)

输出:

abc&#x1FF6;&#x1F24;&#x00DC;&#x1F70;&#x1F54;def