2015-01-09 153 views
2

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

+2

没有两个不同的事情称为unicode的实体和HTML实体,它们是相同的 – ysth

+0

例如代替的ἔ [HTML实体(十六进制)]我需要ἔ [HTML实体(十进制)]。 – Jagath

+1

为什么?他们相当于 – ysth

回答

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实体字符串作为替换。 λ表达式是等效于功能:
def replacement(matchobj): 
     substring = matchobj.group(0) 
     unicode_value = ord(substring) 
     return '&x{:04X};'.format(unicode_value) 

输出:

abcῶἤÜὰὔdef 
+0

这是完美的。你能写一下在这里做什么吗? – Jagath

+0

@blackburn,已更新。 –

4

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

+1

有没有一种方法在这个过程中没有改变ascii字符。另外,请你详细说明在这里完成的过程。 – Jagath