您的位置:首页 > 其它

xlsreadwriteII2的一个unicode的bug

2010-07-24 22:26 169 查看
xlsreadwriteII2 是一个很好用的delphi读写excel文件(xls)的控件。但是实际使用中发现不少bug。





输出的单元格内容,如果没有汉字,只有字母和数字,控件会输出acsii字符串。但是,如果除了字母、数字,另外含有“±”这个字符,xlsreadwriteII2 输出ascii,变成乱码。包含“±”必须输出为unicode字符串。





问题出在 SST2.pas 中的下面那个函数上,英文(非双字节)的 Unicode 的高位好象是 0 所以这个函数返回就是 FALSE ,那 AddString 就调用错了。



function TSST2.IsUnicode(S: WideString): boolean;
var
  i: integer;
  W: word;
begin
  for i := 1 to Length(S) do begin
    W := Word(S[i]);
    if (W and $FF00) <> 0 then begin
      Result := True;
      Exit;
    end;
  end;
  Result := False;
end;

AddString 函数是根据上面那函数来确定调用 AddCompressedString 还是 AddUnicodeString

function TSST2.AddString(S: WideString): PXLSString;
begin
  if IsUnicode(S) then
    Result := AddUnicodeString(S)
  else
    Result := AddCompressedString(S); //±会被当成acsii输出,乱码
end;
 
 
解决办法: 把AddString改成如下:
function TSST2.AddString(S: WideString): PXLSString;
begin
 

  //if IsUnicode(S) then
  //  Result := AddUnicodeString(S)
  //else
  //  Result := AddCompressedString(S);
  Result := AddUnicodeString(S); //改成无论如何都输出unicode!
end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: