有没有源代码???

解决方案 »

  1.   

    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之间的转换,不需要什么对照表。
      

  2.   

    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;
      

  3.   

    将你输入的字符,通过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;