delphi2009中使用自带的TEncoding类进行解码时,部分utf-8字符无法正确解码,阿拉伯字符全部都为问号。
所以使用api函数进行转换。
type
BArr=array of byte;Function Decode2Bytes(strInput:widestring;CodepageIdentifier:cardinal):BArr;
varTLen,lngBufferSize,lngResult,i:integer;
bytResult:BArr;
begin
TLen := Length(strInput);
If TLen = 0 Then
Exit;
lngBufferSize := TLen * 3 + 1;
setlength(bytResult,(lngBufferSize - 1));
lngResult := WideCharToMultiByte(CodepageIdentifier, 0, @strInput[1], TLen, @bytResult[0], lngBufferSize, nil, 0);
setlength(result,lngresult);
for i := 0 to lngResult - 1 do
result[i]:=bytResult[i];
End;
PS:
1.BArr为自定义byte数组类型。
2.CodepageIdentifier源自微软https://msdn.microsoft.com/en-us/library/dd317756(VS.85).aspx