Rust Unicode处理库unic-ucd-hangul的使用,专注韩文字符集Hangul的解析与转换

Rust Unicode处理库unic-ucd-hangul的使用,专注韩文字符集Hangul的解析与转换

unic-ucd-hangul是一个专注于处理韩文字符集(Hangul)的Rust库,属于UNIC项目的一部分(Unicode International Components)。该库提供了对Hangul字符的解析和转换功能。

安装

在您的项目目录中运行以下Cargo命令:

cargo add unic-ucd-hangul

或者在Cargo.toml中添加以下行:

unic-ucd-hangul = "0.9.0"

使用示例

以下是使用unic-ucd-hangul库处理韩文字符的完整示例:

use unic_ucd_hangul::{is_hangul, decompose_syllable, compose_syllable};

fn main() {
    // 检查字符是否是韩文字符
    let hangul_char = '한';
    println!("Is '{}' Hangul? {}", hangul_char, is_hangul(hangul_char));
    
    // 分解韩文音节
    if let Some((choseong, jungseong, jongseong)) = decompose_syllable(hangul_char) {
        println!("Decomposed '{}':", hangul_char);
        println!("  초성(Choseong): {}", choseong);
        println!("  중성(Jungseong): {}", jungseong);
        if let Some(jong) = jongseong {
            println!("  종성(Jongseong): {}", jong);
        } else {
            println!("  종성(Jongseong): None");
        }
    }
    
    // 组合韩文音节
    let choseong = 'ᄒ'; // ㅎ
    let jungseong = 'ᅡ'; // ㅏ
    let jongseong = Some('ᆫ'); // ㄴ
    
    if let Some(composed) = compose_syllable(choseong, jungseong, jongseong) {
        println!("Composed syllable: {}", composed); // 应该输出 "한"
    }
    
    // 处理韩文字符串
    let korean_text = "안녕하세요";
    println!("\nProcessing Korean text: {}", korean_text);
    
    for c in korean_text.chars() {
        if is_hangul(c) {
            println!(" - {} is Hangul", c);
        }
    }
}

完整示例扩展

以下是一个更完整的示例,展示了更多unic-ucd-hangul库的功能:

use unic_ucd_hangul::{
    is_hangul, decompose_syllable, compose_syllable,
    is_hangul_jamo, is_hangul_compatibility_jamo, is_hangul_syllable
};

fn main() {
    // 检查各种类型的韩文字符
    let jamo = 'ᄀ'; // 初声字母
    let compatibility_jamo = 'ㄱ'; // 兼容字母
    let syllable = '가'; // 完整音节
    
    println!("Is '{}' Hangul Jamo? {}", jamo, is_hangul_jamo(jamo));
    println!("Is '{}' Hangul Compatibility Jamo? {}", 
        compatibility_jamo, 
        is_hangul_compatibility_jamo(compatibility_jamo)
    );
    println!("Is '{}' Hangul Syllable? {}", syllable, is_hangul_syllable(syllable));
    
    // 分解多个音节
    let phrase = "대한민국";
    println!("\n分解短语: {}", phrase);
    
    for c in phrase.chars() {
        if is_hangul(c) {
            if let Some((choseong, jungseong, jongseong)) = decompose_syllable(c) {
                println!("音节 '{}' 分解为:", c);
                println!("  초성: {}", choseong);
                println!("  중성: {}", jungseong);
                if let Some(jong) = jongseong {
                    println!("  종성: {}", jong);
                }
            }
        }
    }
    
    // 组合多个音节
    let components = [
        ('ᄀ', 'ᅡ', None),   // 가
        ('ᄂ', 'ᅡ', Some('ᆫ')),  // 난
        ('ᄃ', 'ᅢ', None)    // 대
    ];
    
    println!("\n组合音节:");
    for (cho, jung, jong) in components {
        if let Some(syllable) = compose_syllable(cho, jung, jong) {
            println!("组合 {} + {} + {:?} = {}", cho, jung, jong, syllable);
        }
    }
    
    // 检查字符串中的所有韩文字符
    let mixed_text = "Hello 안녕 123 세계!";
    println!("\n检查混合文本中的韩文字符: {}", mixed_text);
    
    let hangul_chars: Vec<char> = mixed_text.chars().filter(|c| is_hangul(*c)).collect();
    println!("找到的韩文字符: {:?}", hangul_chars);
}

功能说明

  1. is_hangul(c: char) -> bool - 检查字符是否属于韩文字符集
  2. decompose_syllable(c: char) -> Option<(char, char, Option<char>)> - 分解韩文音节为初声(Choseong)、中声(Jungseong)和终声(Jongseong)
  3. compose_syllable(choseong: char, jungseong: char, jongseong: Option<char>) -> Option<char> - 将初声、中声和终声组合成完整的韩文音节
  4. is_hangul_jamo(c: char) -> bool - 检查字符是否是韩文字母
  5. is_hangul_compatibility_jamo(c: char) -> bool - 检查字符是否是韩文兼容字母
  6. is_hangul_syllable(c: char) -> bool - 检查字符是否是韩文音节

许可证

该库采用MIT或Apache-2.0双许可证。


1 回复

Rust Unicode处理库unic-ucd-hangul使用指南

unic-ucd-hangul是Rust生态中专门处理韩文字符集Hangul的Unicode工具库,属于unic项目的一部分,专注于韩文字符的解析、转换和属性查询。

功能特性

  • 支持Hangul音节分解与组合
  • 提供Hangul字符属性查询
  • 实现Jamo(韩文字母)与音节转换
  • 符合Unicode标准对Hangul的处理规范

安装方法

在Cargo.toml中添加依赖:

[dependencies]
unic-ucd-hangul = "0.9.0"

完整示例代码

以下是一个综合使用unic-ucd-hangul库的完整示例,展示了该库的主要功能:

use unic_ucd_hangul::{
    is_hangul, decompose, compose,
    HangulBlock,
    is_leading_jamo, is_vowel_jamo, is_trailing_jamo
};

fn main() {
    // 示例1: 检查字符是否为Hangul
    let sample_char = '한';
    println!("[检查Hangul字符]");
    println!("'{}' 是韩文字符吗? {}", sample_char, is_hangul(sample_char));
    
    // 示例2: 分解Hangul音节
    println!("\n[分解Hangul音节]");
    if let Some((cho, jung, jong)) = decompose(sample_char) {
        println!("'{}' 分解为: 初声 {}, 中声 {}, 终声 {}", 
                sample_char, cho, jung, jong);
        
        // 示例3: 组合Jamo回音节
        println!("\n[组合Jamo为音节]");
        if let Some(recomposed) = compose(cho, jung, Some(jong)) {
            println!("重新组合结果: {}", recomposed);
        }
    }
    
    // 示例4: 检查Jamo类型
    println!("\n[检查Jamo类型]");
    let leading = 'ᄀ';
    let vowel = 'ᅡ';
    let trailing = 'ᆨ';
    
    println!("{} 是初声吗? {}", leading, is_leading_jamo(leading));
    println!("{} 是中声吗? {}", vowel, is_vowel_jamo(vowel));
    println!("{} 是终声吗? {}", trailing, is_trailing_jamo(trailing));
    
    // 示例5: 获取Unicode块信息
    println!("\n[Unicode块信息]");
    let block = HangulBlock::of(sample_char);
    println!("'{}' 属于: {:?}", sample_char, block);
    
    // 示例6: 批量处理字符串
    println!("\n[批量处理字符串]");
    let text = "안녕하세요 Rust 프로그래밍!";
    println!("原始文本: {}", text);
    println!("处理结果: {}", process_hangul(text));
}

// 批量处理字符串中的Hangul字符
fn process_hangul(input: &str) -> String {
    input.chars().map(|c| {
        if is_hangul(c) {
            if let Some((cho, jung, jong)) = decompose(c) {
                format!("[{}{}{}]", cho, jung, jong)
            } else {
                c.to_string()
            }
        } else {
            c.to_string()
        }
    }).collect()
}

输出结果示例

运行上述代码将产生类似以下输出:

[检查Hangul字符]
'한' 是韩文字符吗? true

[分解Hangul音节]
'한' 分解为: 初声 ᄒ, 中声 ᅡ, 终声 ᆫ

[组合Jamo为音节]
重新组合结果: 한

[检查Jamo类型]
ᄀ 是初声吗? true
ᅡ 是中声吗? true
ᆨ 是终声吗? true

[Unicode块信息]
'한' 属于: Syllable

[批量处理字符串]
原始文本: 안녕하세요 Rust 프로그래밍!
处理结果: [안][녏]하세요 Rust [프][로][그][래][밍]!

注意事项

  1. 该库只处理Hangul相关字符,其他Unicode字符需要配合其他库使用
  2. 组合Jamo时,终声(jong)是可选的参数
  3. 所有函数都基于Unicode标准,确保跨平台一致性
  4. 导入时注意使用正确的模块路径unic_ucd_hangul

这个完整示例展示了unic-ucd-hangul库的核心功能,包括字符检查、分解组合、类型判断和批量处理等典型使用场景。

回到顶部