Delphi 中big5 轉 Unicode 函式

Max Woods發表於2014-08-01
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進行的。

相關文章