python - 将变音符号或修饰符变音符号 Unicode 字符转换为 'combining form'

标签 python text unicode

我在 Unicode 字符串中有一些重音/变音符号,我想将它们转换为它们的“组合形式”(根据 Unicode 标准)。例如,如果我有 \N{CIRCUMFLEX ACCENT} ( \u005E ) 或 \N{MODIFIER LETTER CIRCUMFLEX ACCENT} ( \u02C6 ),我想把它转换成 \N{COMBINING CIRCUMFLEX ACCENT} ( \u0302 )。对于任何变音标记,是否有任何一致、可靠的方法来执行此操作?如果 Python (3.9) 标准库对它有内置支持(可能通过 unicodedata 模块),那将是理想的,但我也很高兴为此使用 pip 包。

最佳答案

这是我目前最好的解决方案。仍然感觉有点hacky,但它似乎适用于我遇到的场景。

from typing import *
import unicodedata

def _strip_prefix(s: str, prefix: str) -> str:
    return s[len(prefix):] if s.startswith(prefix) else s

def make_combining_form(diacritic: str) -> Optional[str]:
    if unicodedata.category(diacritic) not in ("Sk", "Lm"):
        return None

    name = unicodedata.name(diacritic)
    name = _strip_prefix(name, "MODIFIER LETTER ")
    name = _strip_prefix(name, "COMBINING ")
    try:
        return unicodedata.lookup("COMBINING " + name)
    except KeyError:
        return None

关于python - 将变音符号或修饰符变音符号 Unicode 字符转换为 'combining form',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66726480/

相关文章:

Python 2 列出比较优化

javascript - 使用页面上的专用按钮复制的文本包含大量空格

java - Java中如何将十六进制字节转换为Unicode

python - 如何声明 IPython 提供的附加更丰富的对象表示?

python - 状态与无状态的属性和优点是什么?

c# - 如何在 C# 中旋转标签?

text - 如何在 Vscode 中调整非文本编辑器字体大小

python - Python 中 Latin-1 字符的短 Unicode\N{} 名称?

php - seo 友好 url 使用西里尔 х 字符,它总是得到 404。如何解决它?

python - 如何批量上传数据到appengine datastore?旧方法不起作用