国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

中文轉碼器的工作原理

2019-11-18 18:19:48
字體:
來源:轉載
供稿:網友

最近在做Delphi下的簡體與繁體轉換, 發現Windows2000自帶的工具"中文轉碼器"很好用, 不僅可以轉內碼(BIG5-->GBK), 還可以將繁體字轉為簡體字(如:東-->東).

要轉內碼比較簡單, 使用MultiByteToWideChar先將簡體/繁體(GBK/BIG5)轉為UniCode, 再使用WideCharToMultiByte從Unicode轉為繁體/簡體(BIG5/GBK).

EX:function Big52GB( ABig5String: string): String;{ BIG5 to GBK : BIG5 ==> Unicode ==> GBK }Var  mWString: array[0..1024] of WideChar;  cchWideChar: Integer;  mLongBool: LongBool;begin  Result := ABig5String;    //分配空間  mLongBool := True;  //1.先取得需要的長度  cchWideChar := MultiByteToWideChar(950, 0, PChar(ABig5String), length(ABig5String), @mWString, 0);//  SetLength(mWString, cchWideChar+1);  //2.BIG5 to Unicode  MultiByteToWideChar(950, 0, PChar(ABig5String), length(ABig5String), @mWString, cchWideChar);  //3.Unicode to GBK  WideCharToMultiByte(936, 0, @mWString, cchWideChar, PChar(Result), length(Result), '?', @mLongBool);end;

經過以上步驟, 就可以把BIG5碼轉為GBK碼,但是繁體中的字因為在GBK中大部分都有對應(繁體字形),因而,以上得到的是BIG5對應的繁體字形,如BIG5碼的 “東”($AA46)得到的GBK對應的字為“東”($967C),而不是簡體中最常用的“東”($B6AB)。

 在中文轉碼器中,最后一頁提供了是否轉字形的選項,它可以做到!那我們也應該可以做到!經過調試,原來它是調用LCMapStringW!

在Windows.pas中,定義了三個這樣的函數:

function LCMapString(Locale: LCID; dwMapFlags: DWord; lpSrcStr: PChar;
  cchSrc: Integer; lpDestStr: PChar; cchDest: Integer): Integer; stdcall;

function LCMapStringA(Locale: LCID; dwMapFlags: DWORD; lpSrcStr: PAnsiChar;
  cchSrc: Integer; lpDestStr: PAnsiChar; cchDest: Integer): Integer; stdcall;

function LCMapStringW(Locale: LCID; dwMapFlags: DWORD; lpSrcStr: PWideChar;
  cchSrc: Integer; lpDestStr: PWideChar; cchDest: Integer): Integer; stdcall;

其中,LCMapString=LCMapStringA,也就是使用ASCII的,當然我們也可以使用LCMapStringW轉UniCode成為簡體字形。


上一篇:生成BIG5字符集所有字符

下一篇:自繪XP風格菜單

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 榆林市| 甘孜| 合肥市| 利川市| 安溪县| 涿鹿县| 沙坪坝区| 尤溪县| 修文县| 航空| 宁陕县| 肃北| 齐齐哈尔市| 富平县| 汝州市| 莱州市| 周宁县| 清徐县| 湟中县| 修武县| 富蕴县| 江陵县| 大荔县| 兰州市| 肃北| 花莲县| 芜湖县| 鸡西市| 山东省| 祥云县| 如东县| 恩施市| 湖南省| 武安市| 巴马| 南宫市| 凉城县| 滁州市| 徐汇区| 石家庄市| 滁州市|