Delphi 中big5 转 Unicode 函数

function Big5ToUnicode(str  Char): widestring;

var

  len: integer;

begin

  len:=MultiByteToWideChar(950,0,PChar(str),-1,nil,0);

  setlength(result,len-1);

  MultiByteToWideChar(950, 0, PChar(str), -1, pwidechar(result), len+1);

  result:=' '+result;

end;

MultiByteToWideChar(950, 0, PChar(str), -1, pwidechar(result), len+1) 各个参数含义:

950:码表,950即Big5和Unicode的对应表;

0:这一位写0就可以了;

PChar(str):字符串的地址(这里又用PChar强行转换了一次,应该没必要);

-1:字符串长度,如果是-1就会自动计算长度并转换到字符串结束;

pwidechar(result):保存结果的地址;

len+1:缓冲区大小,如果为零函数就返回需要的缓冲区大小。

在Big5ToUnicode函数中MultiByteToWideChar使用了两次,第一次是计算所需缓冲区大小,第二次才是正式的转换。结果的长度设成多少需要实验一下,因为结尾或许有不想要的字符。但是不能不设或设成0,这样result并没有获得地址分配,转换会出错。

如果是GB2312,码表号是936。大部分的转码软件都是使用了这个API,GB2312与Big5的互相转换也是通过Unicode进行的。