(**********************************************************************
汉字内码转换: BIG5 -> GB
**********************************************************************)
function Big5toGB(sBIG5 :string) :String;
var
pszBig5
Char; {Big5编码的字符}
wszUnicode
WideChar; {Unicode编码的字符}
pszGbt
Char; {Gb编码的繁体字符}
pszGbs
Char; {Gb编码的简体字符}
iLen :integer; {需要转换的字符数}
begin
{读入需要转换的字符参数}
pszBig5 := PChar(sBig5);
{计算转换的字符数}
iLen := MultiByteToWideChar(950, 0, pszBig5, -1, nil, 0);
{给wszUnicode分配内存}
GetMem(wszUnicode, (iLen+1)*SizeOf(WideChar));
{转换Big5码到Unicode码,使用了API函数MultiByteToWideChar}
MultiByteToWideChar(950, 0, pszBig5, -1, wszUnicode, iLen);
{计算转换的字符数}
iLen := WideCharToMultiByte(936, 0, wszUnicode, -1, nil, 0, nil, nil);
{给pszGbt分配内存}
GetMem(pszGbt, (iLen+1));
{给pszGbs分配内存}
GetMem(pszGbs, (iLen+1));
{转换Unicode码到Gb码繁体,使用API函数WideCharToMultiByte}
WideCharToMultiByte(936, 0, wszUnicode, -1, pszGbt, iLen, nil, nil) ;
{转换Gb码繁体到Gb码简体,使用API函数LCMapString}
LCMapString($804, LCMAP_SIMPLIFIED_CHINESE, pszGbt, -1, pszGbs, iLen);
{返回Gb码简体字符}
Result := Strpas(pszGbs);
{释放分配的内存}
FreeMem(wszUnicode);
FreeMem(pszGbt);
FreeMem(pszGbs);
end;
(**********************************************************************
汉字内码转换: GB -> BIG5
**********************************************************************)
function GBtoBig5(sGB :string) :String;
var
pszGbt
Char; {Gb编码的繁体字符}
pszGbs
Char; {Gb编码的简体字符}
wszUnicode
WideChar; {Unicode编码的字符}
pszBig5
Char; {Big5编码的字符}
iLen :integer; {需要转换的字符数}
begin
{读入需要转换的字符参数}
pszGbs := PChar(sGb);
{计算转换的字符数}
iLen := MultiByteToWideChar (936, 0, pszGbs, -1, nil, 0);
{给pszGbt分配内存}
GetMem(pszGbt, (iLen*2+1));
{转换Gb码简体到Gb码繁体,使用API函数LCMapString}
LCMapString($804, LCMAP_TRADITIONAL_CHINESE, pszGbs, -1, pszGbt, iLen*2);
{给wszUnicode分配内存}
GetMem(wszUnicode, (iLen+1)*SizeOf(WideChar));
{转换Gb码到Unicode码,使用了API函数MultiByteToWideChar}
MultiByteToWideChar(936, 0, pszGbt, -1, wszUnicode, iLen);
{计算转换的字符数}
iLen := WideCharToMultiByte(950, 0, wszUnicode, -1, nil, 0, nil, nil);
{给pszBig5分配内存}
GetMem(pszBig5, (iLen+1));
{转换Unicode码到Big5码,使用API函数WideCharToMultiByte}
WideCharToMultiByte(950, 0, wszUnicode, -1, pszBig5, iLen, nil, nil);
{返回Big5码字符}
Result := strpas(pszBig5);
{释放分配的内存}
FreeMem(wszUnicode);
FreeMem(pszGbt);
FreeMem(pszBig5);
end;