中文轉碼器的工作原理

2021-09-30 03:03:11 字數 1719 閱讀 8071

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

要轉內碼比較簡單, 使用multibytetowidechar先將簡體/繁體(gbk/big5)轉為unicode, 再使用widechartomultibyte從unicode轉為繁體/簡體(big5/gbk).

ex:

function big52gb( abig5string: string): string;

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);

to unicode

multibytetowidechar(950, 0, pchar(abig5string), length(abig5string), @mwstring, cchwidechar);

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成為簡體字形。

Lua中url的中文轉碼

local lua util function lua util.url encode str if str then str string.gsub str,n r n str string.gsub str,w function c return string.format 02x string...

迭代器的工作原理

建立乙個單列集合 linkedlist鍊錶集合 list介面 建立乙個指向自己介面的引用物件,建立了linkedlist類的物件後把它上溯到了list介面,現在它是list的物件,多型的實現。list list new linkedlist list.add 1 list.add 2 list.ad...

交織器的工作原理

交織器從其本質上來說就是一種實現最大限度的改變資訊結構而不改變資訊內容的器件。從傳統上來 講就是使通道傳輸過程中所突發產生集中的錯誤最大限度的分散化。因此,具體來講也許資料置亂器這個稱呼更加符合交織器其本質,會讓人們對交織器的基本工作 機理有更多的感性認識。假定由一些4位元組成的訊息分組,把4個相繼...