1. 程式人生 > >VC/MFC 獲取漢字拼音首字母(unicode編碼)

VC/MFC 獲取漢字拼音首字母(unicode編碼)

CString GetFirstLetter(LPCTSTR strName)
{
    static int li_SecPosValue[] = {
        1601, 1637, 1833, 2078, 2274, 2302, 2433, 2594, 2787, 3106, 3212,
        3472, 3635, 3722, 3730, 3858, 4027, 4086, 4390, 4558, 4684, 4925, 5249
    };
    static char* lc_FirstLetter[] = {
        "A", "B", "C", "D", "E", "F"
, "G", "H", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "W", "X", "Y", "Z" }; static char* ls_SecondSecTable = "CJWGNSPGCGNE[Y[BTYYZDXYKYGT[JNNJQMBSGZSCYJSYY[PGKBZGY[YWJKGKLJYWKPJQHY[W[DZLSGMRYPYWWCCKZNKYYGTTNJJNYKKZYTCJNMCYLQLYPYQFQRPZSLWBTGKJFYXJWZLTBNCXJJJJTXDTTSQZYCDXXHGCK[PHFFSS[YBGXLPPBYLL[HLXS[ZM[JHSOJNGHDZQYKLGJHSGQZHXQGKEZZWYSCSCJXYEYXADZPMDSSMZJZQJYZC[J[WQJBYZPXGZNZCPWHKXHQKMWFBPBYDTJZZKQHY"
"LYGXFPTYJYYZPSZLFCHMQSHGMXXSXJ[[DCSBBQBEFSJYHXWGZKPYLQBGLDLCCTNMAYDDKSSNGYCSGXLYZAYBNPTSDKDYLHGYMYLCXPY[JNDQJWXQXFYYFJLEJPZRXCCQWQQSBNKYMGPLBMJRQCFLNYMYQMSQYRBCJTHZTQFRXQHXMJJCJLXQGJMSHZKBSWYEMYLTXFSYDSWLYCJQXSJNQBSCTYHBFTDCYZDJWYGHQFRXWCKQKXEBPTLPXJZSRMEBWHJLBJSLYYSMDXLCLQKXLHXJRZJMFQHXHWY"
"WSBHTRXXGLHQHFNM[YKLDYXZPYLGG[MTCFPAJJZYLJTYANJGBJPLQGDZYQYAXBKYSECJSZNSLYZHSXLZCGHPXZHZNYTDSBCJKDLZAYFMYDLEBBGQYZKXGLDNDNYSKJSHDLYXBCGHXYPKDJMMZNGMMCLGWZSZXZJFZNMLZZTHCSYDBDLLSCDDNLKJYKJSYCJLKWHQASDKNHCSGANHDAASHTCPLCPQYBSDMPJLPZJOQLCDHJJYSPRCHN[NNLHLYYQYHWZPTCZGWWMZFFJQQQQYXACLBHKDJXDGMMY" "DJXZLLSYGXGKJRYWZWYCLZMSSJZLDBYD[FCXYHLXCHYZJQ[[QAGMNYXPFRKSSBJLYXYSYGLNSCMHZWWMNZJJLXXHCHSY[[TTXRYCYXBYHCSMXJSZNPWGPXXTAYBGAJCXLY[DCCWZOCWKCCSBNHCPDYZNFCYYTYCKXKYBSQKKYTQQXFCWCHCYKELZQBSQYJQCCLMTHSYWHMKTLKJLYCXWHEQQHTQH[PQ[QSCFYMNDMGBWHWLGSLLYSDLMLXPTHMJHWLJZYHZJXHTXJLHXRSWLWZJCBXMHZQXSDZP" "MGFCSGLSXYMJSHXPJXWMYQKSMYPLRTHBXFTPMHYXLCHLHLZYLXGSSSSTCLSLDCLRPBHZHXYYFHB[GDMYCNQQWLQHJJ[YWJZYEJJDHPBLQXTQKWHLCHQXAGTLXLJXMSL[HTZKZJECXJCJNMFBY[SFYWYBJZGNYSDZSQYRSLJPCLPWXSDWEJBJCBCNAYTWGMPAPCLYQPCLZXSBNMSGGFNZJJBZSFZYNDXHPLQKZCZWALSBCCJX[YZGWKYPSGXFZFCDKHJGXDLQFSGDSLQWZKXTMHSBGZMJZRGLYJB" "PMLMSXLZJQQHZYJCZYDJWBMYKLDDPMJEGXYHYLXHLQYQHKYCWCJMYYXNATJHYCCXZPCQLBZWWYTWBQCMLPMYRJCCCXFPZNZZLJPLXXYZTZLGDLDCKLYRZZGQTGJHHGJLJAXFGFJZSLCFDQZLCLGJDJCSNZLLJPJQDCCLCJXMYZFTSXGCGSBRZXJQQCTZHGYQTJQQLZXJYLYLBCYAMCSTYLPDJBYREGKLZYZHLYSZQLZNWCZCLLWJQJJJKDGJZOLBBZPPGLGHTGZXYGHZMYCNQSYCYHBHGXKAMTX" "YXNBSKYZZGJZLQJDFCJXDYGJQJJPMGWGJJJPKQSBGBMMCJSSCLPQPDXCDYYKY[CJDDYYGYWRHJRTGZNYQLDKLJSZZGZQZJGDYKSHPZMTLCPWNJAFYZDJCNMWESCYGLBTZCGMSSLLYXQSXSBSJSBBSGGHFJLYPMZJNLYYWDQSHZXTYYWHMZYHYWDBXBTLMSYYYFSXJC[DXXLHJHF[SXZQHFZMZCZTQCXZXRTTDJHNNYZQQMNQDMMG[YDXMJGDHCDYZBFFALLZTDLTFXMXQZDNGWQDBDCZJDXBZGS" "QQDDJCMBKZFFXMKDMDSYYSZCMLJDSYNSBRSKMKMPCKLGDBQTFZSWTFGGLYPLLJZHGJ[GYPZLTCSMCNBTJBQFKTHBYZGKPBBYMTDSSXTBNPDKLEYCJNYDDYKZDDHQHSDZSCTARLLTKZLGECLLKJLQJAQNBDKKGHPJTZQKSECSHALQFMMGJNLYJBBTMLYZXDCJPLDLPCQDHZYCBZSCZBZMSLJFLKRZJSNFRGJHXPDHYJYBZGDLQCSEZGXLBLGYXTWMABCHECMWYJYZLLJJYHLG[DJLSLYGKDZPZXJ" "YYZLWCXSZFGWYYDLYHCLJSCMBJHBLYZLYCBLYDPDQYSXQZBYTDKYXJY[CNRJMPDJGKLCLJBCTBJDDBBLBLCZQRPPXJCJLZCSHLTOLJNMDDDLNGKAQHQHJGYKHEZNMSHRP[QQJCHGMFPRXHJGDYCHGHLYRZQLCYQJNZSQTKQJYMSZSWLCFQQQXYFGGYPTQWLMCRNFKKFSYYLQBMQAMMMYXCTPSHCPTXXZZSMPHPSHMCLMLDQFYQXSZYYDYJZZHQPDSZGLSTJBCKBXYQZJSGPSXQZQZRQTBDKYXZK" "HHGFLBCSMDLDGDZDBLZYYCXNNCSYBZBFGLZZXSWMSCCMQNJQSBDQSJTXXMBLTXZCLZSHZCXRQJGJYLXZFJPHYMZQQYDFQJJLZZNZJCDGZYGCTXMZYSCTLKPHTXHTLBJXJLXSCDQXCBBTJFQZFSLTJBTKQBXXJJLJCHCZDBZJDCZJDCPRNPQCJPFCZLCLZXZDMXMPHJSGZGSZZQLYLWTJPFSYASMCJBTZKYCWMYTCSJJLJCQLWZMALBXYFBPNLSFHTGJWEJJXXGLLJSTGSHJQLZFKCGNNNSZFDEQ" "FHBSAQTGYLBXMMYGSZLDYDQMJJRGBJTKGDHGKBLQKBDMBYLXWCXYTTYBKMRTJZXQJBHLMHMJJZMQASLDCYXYQDLQCAFYWYXQHZ"; //將unicode編碼轉換成ANSI編碼 int nSecondSecTable = strlen(ls_SecondSecTable); int stringlen = wcslen(strName); char *buffer = NULL; buffer = new char[stringlen * sizeof(TCHAR) + 1]; ZeroMemory(buffer, stringlen * sizeof(TCHAR) + 1); WideCharToMultiByte(CP_ACP, NULL, strName, stringlen, buffer, stringlen * sizeof(TCHAR) + 1, NULL, NULL); // std::string result; int nHigh, nLow, nCode; int i, j; for (i = 0; i < stringlen*sizeof(TCHAR); i++) { //找到漢字的機內碼 nHigh = (UCHAR)(buffer[i + 0]); nLow = (UCHAR)(buffer[i + 1]); if (nHigh < 0xA1 || nLow < 0xA1) //非漢字保留 { result += buffer[i]; continue; } else { //一級漢字機內碼與區位碼的關係 //機內碼高位元組 = 區碼 + 0XA0; //機內碼低位元組 = 位碼 + 0XA0; //區位碼 = (機內碼高位元組 - 0XA0) * 100 + 機內碼低位元組 - 0XA0; nCode = (nHigh - 0XA0) * 100 + nLow - 0XA0; } if (nCode > 1600 && nCode < 5590) //一級漢字 16-55區 { for (j = 22; j >= 0; j--) { if (nCode >= li_SecPosValue[j]) { result += lc_FirstLetter[j]; i++; break; } } continue; } else //二級漢字通過查表 56-87區;將二級漢字拼音的首字母放在ls_SecondSecTable表中 { i++; //根據機內碼轉換成ls_SecondSecTable表的下標 nCode = (nHigh - 0XA0 - 56) * 94 + nLow - 0XA0 - 1; if (nCode >= 0 && nCode < nSecondSecTable) result += ls_SecondSecTable[nCode]; else { result += (char)nHigh; result += (char)nLow; } } } //將ANSI編碼轉換成unicode編碼 TCHAR *pwcsTemp = new TCHAR[stringlen + 1]; ZeroMemory(pwcsTemp, (stringlen + 1) * sizeof(TCHAR)); MultiByteToWideChar(CP_ACP, NULL, result.c_str(), result.length(), pwcsTemp, stringlen); CString str = pwcsTemp; // delete[]pwcsTemp; pwcsTemp = NULL; delete[]buffer; buffer = NULL; return str; }

相關推薦

VC/MFC 獲取漢字拼音字母unicode編碼

CString GetFirstLetter(LPCTSTR strName) { static int li_SecPosValue[] = { 1601, 1637, 1833, 2078, 2274, 2302, 2433,

php獲取漢字拼音字母的方法

emp tool iconv ace utf-8 comment 進行 adding padding 現實中我們經常看到這樣的說明,排名不分先後,按姓名首字母進行排序。這是中國人大多數使用的排序方法。那麽在php程序中該如何操作呢? 下面就分享一下在php程序中獲取漢字

mysql獲取漢字拼音字母

DELIMITER $$ USE `test`$$ DROP FUNCTION IF EXISTS `getPY`$$ CREATE DEFINER=`root`@`%` FUNCTION `getPY`(in_string VARCHAR(255)) RETURNS VARCHAR(255)

在Excel中如何獲取漢字拼音字母?

轉自:https://jingyan.baidu.com/article/0a52e3f43c3f6abf63ed7259.html百度經驗 在Excel中如何獲取漢字拼音首字母?|      在工作中,為了方便查詢、排序或者編碼,需要生成漢字內容

獲取漢字拼音字母類封裝

1、程式碼如下: 1 <?php 2 /** 3 * @file Pinyin.php 4 * @author whx https://www.cnblogs.com/whx-blogs/ 5 * @date 2018/12/03 18:32:18

sqlserver 獲取漢字拼音字母

create function [dbo].[fun_getPY](@str nvarchar(4000)) returns nvarchar(4000) as begin declare @word nvarchar(1),@PY nvarchar(4000) set @PY='' set @st

delphi獲取漢字拼音字母〖各版本通用〗

因為DELPHI 2009開始支援UNICODE,所以如果使用DELPHI7需要用記事本,批量替換AnsiString為string,AnsiChar為char,就可以完美支援DELPHI 2009以下版本,現在附上的程式碼是預設支援UNICODE的,DELPHI XE4環

JAVA獲取漢字拼音字母

ecp ascii碼 else chart || versions odin osc 支持 package com.common.util;import java.io.UnsupportedEncodingException; /** * 取得給定漢字串的首字母串,即

根據漢字獲取拼音字母

<mce:script  language="vbscript"><!--   function vbChr(c)    vbChr = chr(c)    end function   function vbAsc(n)    vbAsc = asc(n)    end f

MFC獲得漢字拼音字母-C++版

//1、定義一個常量陣列 static const CStringW g_TxtToPy[] = { L"A阿啊錒嗄厑哎哀唉埃挨溾鑀鑀啀捱皚凒溰嘊敳皚癌毐昹噯矮藹躷噯藹譪靄靄艾伌愛砈硋隘嗌塧嬡愛礙曖璦僾壒嬡懓薆曖璦鴱皧瞹馤鑀鱫安侒峖桉氨庵諳萻腤鵪蓭誝鞌鞍盦馣

漢字拼音字母的方法

nts cti res character con andro 字節 ext creat 近期在做一個按拼音首字母排序的ListView須要取漢字拼音首字母,Deomo下載地址:http://download.csdn.net/detail/u014649598/8

JS獲取中文拼音字母,並通過拼音字母快速查詢頁面內的中文內容

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

根據漢字拼音字母排序

                Comparator<Object> com=Collator.getInstance(java.util.Locale.CHINA);String[] newArray={"

解決IDEA下的Terminal 亂碼unicode 編碼問題

前言 在使用IDEA進行開發的時候,難免會用到Git,兩個視窗切換來切換去的很不方便,為了簡單,我將IDEA自帶的Terminal設定為Git的,這樣就能達到在IDEA上敲Git命令的效果。 這裡簡單的介紹下具體的配置流程以及使用Git會引起的Unicode

(轉)C# 獲取漢字拼音字母和全拼含原始碼[A]

  https://blog.csdn.net/younghaiqing/article/details/62417269   C# 獲取漢字的拼音首字母 一種是把所有中文字元集合起來組成一個對照表;另一種是依照漢字在Unicode編碼表中的排序來確定拼音的首字母

vc中實現獲取漢字拼音字母

最近打算做一個基於字串首字元(漢字取拼音的首字母)進行查詢的電話簿WEB專案,由於Web本身並不支援漢字的編碼程式設計,因此需要求助於平臺開發工具。  Google上搜到一種實現方法,是用C++實現的。以下是原始碼:  void GetFirstLetter(CString

SQL將用戶表中已存在的數據所有姓名漢字轉換為拼音字母

var 語句 ont htm bold varchar 實現 where into 實現方法: --函數 Create function [dbo].[fn_GetPy](@str nvarchar(4000)) returns nvarchar(4000) --

漢字拼音拼音字母的模糊查詢匹配左側完整示例,JavaFX方式

package pinyintest; import javafx.application.Application; import javafx.beans.value.ObservableValue; import javafx.geometry.Insets; import java

MySQL獲取漢字拼音字母

--獲取漢字拼音首字母的函式其一 DROP FUNCTION IF EXISTS `GET_FIRST_PINYIN_CHAR`; DELIMITER ;; CREATE FUNCTION `GET_F

Java獲取獲取漢字拼音字母程式碼

1、定義一個Bean: public class PinyinCode {  private String pinyin;  private int code;    public PinyinCode(String py, int cd) {   pinyin = py;