function GB2Unicode(GB:string):string; var s: string; i, j, k: integer; a: array [1..1000] of char; begin s:=''; StringToWideChar(GB, @(a[1]), 500); i:=1; while ((a[i]<>#0) or (a[i+1]<>#0)) do begin j:=Integer(a[i]); k:=Integer(a[i+1]); s:=s+Copy(Format('%X ',[k*$100+j+$10000]) ,2,4); i:=i+2; end; Result:=s; end;简体和繁体转换: 请参看MSDN的API LCMapString 它可以实现GB和big5和Unicode之间的转换,不需要什么对照表。
LCMapString的使用例子:uses SysUtils, Windows;function StrConv(pszSrc : PChar; cpSrc : UINT; pszDest : PChar; cbDest : Longint; cpDest : UINT) : Longint; var buf : PWideChar; cwLen : LongInt; begin cwLen := MultiByteToWideChar(cpSrc, 0, pszSrc, -1, nil, 0); GetMem(buf, (cwLen+1) * SizeOf(WideChar)); ZeroMemory(buf, (cwLen+1) * SizeOf(WideChar)); MultiByteToWideChar(cpSrc, 0, pszSrc, StrLen(pszSrc), buf, cwLen+1); Result := WideCharToMultiByte(cpDest, 0, buf, -1, pszDest, cbDest, nil, nil); FreeMem(buf); end;function StringConv(const Src : string; cpSrc, cpDest : UINT) : string; var buf : PChar; len : Longint; begin len := StrConv(PChar(Src), cpSrc, nil, 0, cpDest); GetMem(buf, len); ZeroMemory(buf, len); StrConv(PChar(Src), cpSrc, buf, len, cpDest); Result := string(buf); FreeMem(buf); end;function CHTStringToCHSString(Src : string) : string; var buf : PChar; len : Integer; begin len := LCMapString($804, // LCID_CHINESE_SIMPLIFIED LCMAP_SIMPLIFIED_CHINESE, PChar(Src), -1, nil, 0); GetMem(buf, len); ZeroMemory(buf, len); LCMapString($804, // LCID_CHINESE_SIMPLIFIED LCMAP_SIMPLIFIED_CHINESE, PChar(Src), -1, buf, len); Result := string(buf); FreeMem(buf); end;function CHSStringToCHTString(Src : string) : string; var buf : PChar; len : Integer; begin len := LCMapString($404, // LCID_CHINESE_SIMPLIFIED LCMAP_TRADITIONAL_CHINESE, PChar(Src), -1, nil, 0); GetMem(buf, len); ZeroMemory(buf, len); LCMapString($404, // LCID_CHINESE_SIMPLIFIED LCMAP_TRADITIONAL_CHINESE, PChar(Src), -1, buf, len); Result := string(buf); FreeMem(buf); end;function CHTToCHS(pszSrc, pszDest : PChar; cbDest : Longint) : Longint; begin Result := LCMapString($804, // LCID_CHINESE_SIMPLIFIED LCMAP_SIMPLIFIED_CHINESE, pszSrc, -1, pszDest, cbDest); end;function CHSToCHT(pszSrc, pszDest : PChar; cbDest : Longint) : Longint; begin Result := LCMapString($404, // LCID_CHINESE_SIMPLIFIED LCMAP_TRADITIONAL_CHINESE, pszSrc, -1, pszDest, cbDest); end;function Big5StringToGBString(Src : string) : string; begin Result := CHTStringToCHSString(StringConv(Src, 950, 936)); end;function Big5ToGB(pszSrc, pszDest : PChar; cbDest : Longint) : Longint; var buf : PChar; len : Integer; begin len := StrLen(pszSrc)+1; GetMem(buf, len*2); ZeroMemory(buf, len*2); StrConv(pszSrc, 950, buf, 936, len*2); Result := CHTToCHS(buf, pszDest, cbDest); FreeMem(buf); end;function GBStringToBig5String(Src : string) : string; begin Result := CHSStringToCHTString(StringConv(Src, 936, 950)); end;function GBToBig5(pszSrc, pszDest : PChar; cbDest : Longint) : Longint; var buf : PChar; len : Integer; begin len := StrLen(pszSrc)+1; GetMem(buf, len*2); ZeroMemory(buf, len*2); StrConv(pszSrc, 936, buf, 950, len*2); Result := CHSToCHT(buf, pszDest, cbDest); FreeMem(buf); end;
将你输入的字符,通过MultiByteToWideChar将Ansi字符转成UNICODE字符,下面是转换的例子。function KeyUnicode(C: AnsiChar): WideChar;// converts the given character (as it comes with a WM_CHAR message) into its corresponding // Unicode character depending on the active keyboard layoutbegin MultiByteToWideChar(KeyboardCodePage, MB_USEGLYPHCHARS, @C, 1, @Result, 1); end;var aa: AnsiChar; bb : WideChar; begin aa := '虫'; bb := KeyUnicode(aa); end;
var
s: string;
i, j, k: integer;
a: array [1..1000] of char;
begin
s:='';
StringToWideChar(GB, @(a[1]), 500);
i:=1;
while ((a[i]<>#0) or (a[i+1]<>#0)) do begin
j:=Integer(a[i]); k:=Integer(a[i+1]);
s:=s+Copy(Format('%X ',[k*$100+j+$10000]) ,2,4);
i:=i+2;
end;
Result:=s;
end;简体和繁体转换:
请参看MSDN的API
LCMapString
它可以实现GB和big5和Unicode之间的转换,不需要什么对照表。
SysUtils, Windows;function StrConv(pszSrc : PChar; cpSrc : UINT; pszDest : PChar; cbDest :
Longint; cpDest : UINT) : Longint;
var
buf : PWideChar;
cwLen : LongInt;
begin
cwLen := MultiByteToWideChar(cpSrc,
0,
pszSrc,
-1,
nil,
0);
GetMem(buf, (cwLen+1) * SizeOf(WideChar));
ZeroMemory(buf, (cwLen+1) * SizeOf(WideChar));
MultiByteToWideChar(cpSrc,
0,
pszSrc,
StrLen(pszSrc),
buf,
cwLen+1);
Result := WideCharToMultiByte(cpDest,
0,
buf,
-1,
pszDest,
cbDest,
nil,
nil);
FreeMem(buf);
end;function StringConv(const Src : string; cpSrc, cpDest : UINT) : string;
var
buf : PChar;
len : Longint;
begin
len := StrConv(PChar(Src), cpSrc, nil, 0, cpDest);
GetMem(buf, len);
ZeroMemory(buf, len);
StrConv(PChar(Src), cpSrc, buf, len, cpDest);
Result := string(buf);
FreeMem(buf);
end;function CHTStringToCHSString(Src : string) : string;
var
buf : PChar;
len : Integer;
begin
len := LCMapString($804, // LCID_CHINESE_SIMPLIFIED
LCMAP_SIMPLIFIED_CHINESE,
PChar(Src),
-1,
nil,
0);
GetMem(buf, len);
ZeroMemory(buf, len);
LCMapString($804, // LCID_CHINESE_SIMPLIFIED
LCMAP_SIMPLIFIED_CHINESE,
PChar(Src),
-1,
buf,
len);
Result := string(buf);
FreeMem(buf);
end;function CHSStringToCHTString(Src : string) : string;
var
buf : PChar;
len : Integer;
begin
len := LCMapString($404, // LCID_CHINESE_SIMPLIFIED
LCMAP_TRADITIONAL_CHINESE,
PChar(Src),
-1,
nil,
0);
GetMem(buf, len);
ZeroMemory(buf, len);
LCMapString($404, // LCID_CHINESE_SIMPLIFIED
LCMAP_TRADITIONAL_CHINESE,
PChar(Src),
-1,
buf,
len);
Result := string(buf);
FreeMem(buf);
end;function CHTToCHS(pszSrc, pszDest : PChar; cbDest : Longint) : Longint;
begin
Result := LCMapString($804, // LCID_CHINESE_SIMPLIFIED
LCMAP_SIMPLIFIED_CHINESE,
pszSrc,
-1,
pszDest,
cbDest);
end;function CHSToCHT(pszSrc, pszDest : PChar; cbDest : Longint) : Longint;
begin
Result := LCMapString($404, // LCID_CHINESE_SIMPLIFIED
LCMAP_TRADITIONAL_CHINESE,
pszSrc,
-1,
pszDest,
cbDest);
end;function Big5StringToGBString(Src : string) : string;
begin
Result := CHTStringToCHSString(StringConv(Src, 950, 936));
end;function Big5ToGB(pszSrc, pszDest : PChar; cbDest : Longint) : Longint;
var
buf : PChar;
len : Integer;
begin
len := StrLen(pszSrc)+1;
GetMem(buf, len*2);
ZeroMemory(buf, len*2);
StrConv(pszSrc, 950, buf, 936, len*2);
Result := CHTToCHS(buf, pszDest, cbDest);
FreeMem(buf);
end;function GBStringToBig5String(Src : string) : string;
begin
Result := CHSStringToCHTString(StringConv(Src, 936, 950));
end;function GBToBig5(pszSrc, pszDest : PChar; cbDest : Longint) : Longint;
var
buf : PChar;
len : Integer;
begin
len := StrLen(pszSrc)+1;
GetMem(buf, len*2);
ZeroMemory(buf, len*2);
StrConv(pszSrc, 936, buf, 950, len*2);
Result := CHSToCHT(buf, pszDest, cbDest);
FreeMem(buf);
end;
// Unicode character depending on the active keyboard layoutbegin
MultiByteToWideChar(KeyboardCodePage, MB_USEGLYPHCHARS, @C, 1, @Result, 1);
end;var
aa: AnsiChar;
bb : WideChar;
begin
aa := '虫';
bb := KeyUnicode(aa);
end;