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

C# 獲取漢字拼音首字母:基於 GB2312 編碼區位碼算法

     編輯:關於C#

利用漢字在 GB2312 (系統預設 ANSI 編碼) 中的區位碼範圍,計算拼音首字母。無需庞大拼音字庫,代碼極簡。

核心原理

  • GB2312 中漢字佔 2 字節:高字節 (區碼) + 低字節 (位碼)。
  • 將兩字節合併為整數 code = (area << 8) + pos。
  • 根據預定義的 26 個拼音首字母區位碼起始範圍 (areacode 陣列) 判斷歸屬。

完整代碼

static public string GetChineseSpell(string strText) {
    int len = strText.Length;
    string myStr = "";
    for (int i = 0; i < len; i++) {
        myStr += getSpell(strText.Substring(i, 1));
    }
    return myStr;
}

static public string getSpell(string cnChar) {
    byte[] arrCN = Encoding.Default.GetBytes(cnChar);
    if (arrCN.Length > 1) { // 雙字節字符 (漢字)
        int area = (short)arrCN[0];
        int pos = (short)arrCN[1];
        int code = (area << 8) + pos;

        // 26個首字母對應的區位碼起始值 (GB2312)
        int[] areacode = { 45217, 45253, 45761, 46318, 46826, 47010, 47297, 47614,
                           48119, 48119, 49062, 49324, 49896, 50371, 50614, 50622,
                           50906, 51387, 51446, 52218, 52698, 52698, 52698, 52980,
                           53689, 54481 };

        for (int i = 0; i < 26; i++) {
            int max = (i != 25) ? areacode[i + 1] : 55290;
            if (areacode[i] <= code && code < max) {
                return Encoding.Default.GetString(new byte[] { (byte)(65 + i) }); // A-Z
            }
        }
        return "*"; // 未識別
    } else {
        return cnChar; // 非漢字原樣返回 (字母、數字、符號)
    }
}

使用示例

string input = "中國";
string result = GetChineseSpell(input); // 返回 "ZG"
Console.WriteLine(result);

注意事項

  • 依賴 Encoding.Default (系統 ANSI 代碼頁),簡體中文系統通常為 GB2312/GBK。繁體環境 (Big5) 不適用。
  • 僅支持基本漢字區,擴展區字符可能返回 *。
  • 性能極高,適合拼音首字母索引、排序等高頻場景。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved