利用漢字在 GB2312 (系統預設 ANSI 編碼) 中的區位碼範圍,計算拼音首字母。無需庞大拼音字庫,代碼極簡。
code = (area << 8) + pos。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) 不適用。*。