首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

C# 使用 Microsoft International Pack 實現漢字轉拼音/首字母

     編輯:ASP.NET 基礎

方案選擇

需求:將中文字串轉為拼音(全拼/首字母),用於排序、搜尋、代碼產生。

方案一:官方 International Pack (適用 .NET Framework 4.x)

安裝步驟

  1. 下載 Microsoft Visual Studio International Feature Pack 2.0 (Vsintlpack2.msi)。
  2. 安裝後,參考組件:C:\Program Files (x86)\Microsoft Visual Studio International Pack\Simplified Chinese Pin-Yin Conversion Library\ChnCharInfo.dll
  3. 引用命名空間:using Microsoft.International.Converters.PinYinConverter;

核心程式碼

public static class ChineseHelper
{
    /// 
    /// 取得全拼(每字取第一個讀音,去除聲調數字,首字母大寫)
    /// 
    public static string GetPinyin(string chinese)
    {
        if (string.IsNullOrEmpty(chinese)) return "";
        var sb = new StringBuilder();
        foreach (char c in chinese)
        {
            try
            {
                var cc = new ChineseChar(c);
                // Pinyins 例:"gu4", "ying1" → 取第一個、去尾數、首字大寫
                string py = cc.Pinyins[0];
                py = py.Substring(0, py.Length - 1); // 移除聲調數字
                sb.Append(char.ToUpper(py[0])).Append(py.Substring(1)).Append(' ');
            }
            catch
            {
                sb.Append(c).Append(' '); // 非漢字保留原字
            }
        }
        return sb.ToString().Trim();
    }

    /// 
    /// 取得首字母(大寫)
    /// 
    public static string GetFirstLetters(string chinese)
    {
        if (string.IsNullOrEmpty(chinese)) return "";
        var sb = new StringBuilder();
        foreach (char c in chinese)
        {
            try
            {
                var cc = new ChineseChar(c);
                string py = cc.Pinyins[0];
                sb.Append(char.ToUpper(py[0]));
            }
            catch
            {
                sb.Append(c);
            }
        }
        return sb.ToString();
    }
}

方案二:PinYinConverter NuGet (跨平台、免安裝)

// Package Manager Console
Install-Package PinYinConverter -Version 1.0.0
using PinYinConverter; // 命名空間相同

// API 與官方完全一致
var cc = new ChineseChar('中');
var py = cc.Pinyins[0]; // "zhong1"

方案三:Chinese.Pinyin (現代、高效、MIT)

Install-Package Chinese.Pinyin
using Chinese.Pinyin;

string text = "中國人";
// 全拼(空格分隔、首字大寫)
string pinyin = PinyinHelper.ConvertToPinyin(text, PinyinFormat.WithToneMarks); // "Zhōng Guó Rén"
// 無聲調
string plain = PinyinHelper.ConvertToPinyin(text, PinyinFormat.WithoutTone);   // "Zhong Guo Ren"
// 首字母
string initials = PinyinHelper.GetInitials(text); // "ZGR"

多音字處理策略

  • 預設取第一個讀音:`ChineseChar.Pinyins[0]`,覆蓋 90% 常用詞。
  • 詞庫修正:結合 jieba.NET 分詞 + 自訂詞頻字典,針對「重慶/長行/發呆」等多音詞強制指定讀音。
  • 使用者確認:關鍵業務(人名、地址)提供編輯介面讓使用者二次確認。

效能測試 (10 萬字串)

方案優點缺點推薦度
Microsoft Visual Studio International Pack (官方)官方維護、支援多音字、筆畫、繁簡轉換需安裝 MSI、僅 .NET Framework、文件較舊★★★☆☆ (舊專案維護)
PinYinConverter (NuGet, 社群移植)免安裝、支援 .NET Core/5+、API 相容非官方維護★★★★☆
Chinese.Pinyin (NuGet, 開源)純 managed、無依賴、支援多音字、效能佳需評估授權 (MIT)★★★★★ (新專案首選)
自建對照表零依賴、完全可控維護成本高、多音字難處理★☆☆☆☆

總結

  • 舊專案 (.NET Framework) 已引用 International Pack → 繼續使用,封裝 ChineseHelper 統一介面。
  • 新專案 / .NET Core / 跨平台 → 首選 Chinese.Pinyin,效能最佳、API 現代、MIT 授權無顧慮。
  • 多音字無法 100% 機器解決,關鍵業務需人工複核機制。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
庫耗時 (ms)記憶體 (MB)備註
International Pack~1200~45COM 互通開銷
PinYinConverter~950~38純 managed 移植
Chinese.Pinyin~320~12字典壓縮、無 GC 壓力