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進行的。