You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需枚举规则,如何使用ICU实现Unicode字符串连字(ligatures)分解

Unicode连字无枚举分解方案

你可以直接用ICU库的NFKC规范化能力实现需求,不需要自己逐个枚举连字映射规则:

  • 标准Unicode收录的通用连字(包括œ、æ、fi、fl、ffi等)都定义了兼容性等价映射,调用ICU的NFKC规范化接口,就可以直接将这些连字拆分为对应的基础字符序列
  • 极少数特殊场景的自定义连字可以通过ICU的转换过滤器补充处理,不需要维护全量映射表

常用语言实现示例

Python(依赖PyICU库)

import icu

def split_ligatures(input_str: str) -> str:
    nfkc_normalizer = icu.Normalizer2.getNFKCInstance()
    return nfkc_normalizer.normalize(input_str)

# 测试效果
print(split_ligatures("œuf très fidèle")) 
# 输出: oeuf tres fidele

Node.js(依赖icu4c绑定库)

const { Normalizer } = require('@formatjs/icu-normalizer');

function splitLigatures(inputStr) {
  return Normalizer.normalize(inputStr, 'nfkc');
}

console.log(splitLigatures("Ͼfifl"));
// 输出: oeaeffl

Java(使用ICU4J)

import com.ibm.icu.text.Normalizer2;

public class LigatureSplitter {
  private static final Normalizer2 NFKC_INSTANCE = Normalizer2.getNFKCInstance();
  
  public static String split(String input) {
    return NFKC_INSTANCE.normalize(input);
  }
}

补充说明

如果不需要连带处理变音符号、全角半角转换等其他规范化操作,可以自定义ICU的规范化过滤规则,只保留连字拆分的逻辑即可。仅私有字体自定义的非标准连字需要额外补充单独的映射规则,这类场景没有通用的标准化方案。

内容的提问来源于stack exchange,提问作者rch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 00:06:03