我一直在搜索如何将Unicode符号(ἔ)转换为相应的Unicode实体(ἔ)的合适解决方案。我有一个文本文件,其中包含许多像ῶἤÜὰὔ这样的符号。我正在寻找一个python甚至Perl脚本,它可以将文件作为参数并处理每个符号并在输出文件中写入其等效的Unicode实体。我看到类似的问题here,但它正在处理html实体。
答案 0 :(得分:4)
perl -Ci -0777 -E 'print map {sprintf "&#x%04x;", ord $_} split(//,<>)' foo.txt
答案 1 :(得分:2)
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ῶἤÜὰὔdef