xlsreadwriteII2的一个unicode的bug
2010-07-24 22:26
169 查看
xlsreadwriteII2 是一个很好用的delphi读写excel文件(xls)的控件。但是实际使用中发现不少bug。
输出的单元格内容,如果没有汉字,只有字母和数字,控件会输出acsii字符串。但是,如果除了字母、数字,另外含有“±”这个字符,xlsreadwriteII2 输出ascii,变成乱码。包含“±”必须输出为unicode字符串。
问题出在 SST2.pas 中的下面那个函数上,英文(非双字节)的 Unicode 的高位好象是 0 所以这个函数返回就是 FALSE ,那 AddString 就调用错了。
输出的单元格内容,如果没有汉字,只有字母和数字,控件会输出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;
相关文章推荐
- Python2 下 Unicode 的一个小bug
- .Text Blog .95中一个Unicode的bug
- oracle 9.2.0.1版本函数编译的一个BUG
- Microsoft SQL Server 2000中一个讨厌的Bug
- ORACLE10G 出现00600的一个BUG的解决方案
- extJs4 中 panel 的 setTitle 的 一个显示 BUG
- SmtpClient的一个bug
- 发现一个CSDN的Bug,有图
- 发现live555中一个小bug
- 一个困扰我一个多星期的Nebula3的BUG
- 一个panic bug的分析过程
- 一个尚未发现bug的小程序
- 360桌面JSAPI一个诡异的bug:客户端与网页通过js通信
- 一个在 Returns Form 里面找不到 serial number 的bug
- Hive1.1.0中一个BUG的记录分析
- 一个关于Unicode字符编码的奇怪问题
- bugzilla一个free的bug跟踪系统
- PostgreSQL 8.0 rc1 的一个BUG,已经提交给Developement team
- 一个关于临时对象的BUG
- Cocos2d-x 3.0 JNI BUG 修复。(Android 如何创建一个线程 延迟执行函数 创建一个随机数)