【问题标题】:Convert unicode symbol to unicode entity将 unicode 符号转换为 unicode 实体
【发布时间】:2015-03-07 13:11:09
【问题描述】:

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

【问题讨论】:

  • 没有两个不同的东西叫unicode实体和html实体,它们是一样的
  • 例如代替 ἔ [HTML 实体(十六进制)] 我需要 ἔ [HTML 实体(十进制)]。
  • 为什么?它们是等价的
  • 我知道两者是一样的。但是,我的要求是 ἔ而不是 ἔ.

标签: python perl unicode


【解决方案1】:

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

【讨论】:

  • 有没有办法在这个过程中不改变 ascii 字符。另外,请您详细说明这里完成的过程。
【解决方案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

【讨论】:

  • 这是完美的。你能写一下这里是做什么的吗?
猜你喜欢
  • 1970-01-01
  • 2019-04-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2011-12-19
  • 2015-10-18
  • 2015-01-15
  • 1970-01-01
相关资源
最近更新 更多