我遇到了一个奇怪的问题,它至少影响了我的 Delphi 6 应用程序的一些国际用户。这是场景:
- 我的程序定期从充当 HTTP 服务器的外部设备请求状态报告。
- 设备将状态报告作为响应文档发回,该响应文档具有一系列字段,以名称值对格式的管道字符分隔(例如 - field1=-0.437)。
- 我将报告字符串拆分为字段,然后再次获取每个字段名称和数值。
- 我使用 StrToFloat() 将浮点字段值转换为字符串格式,并将该函数的结果分配给Variant变量。
这在大多数 PC 上都可以正常工作,但是当我尝试对数值使用 StrToFloat() 时,我的一些国际用户会遇到EConvertError 。这是我的日志中错误消息的具体示例:
EConvertError:“-0.685”不是有效的浮点值
如您所见,-0.685是一个有效的浮点数,但我得到了 EConvertError 异常。通常我希望看到小数点所在的逗号,或者其他一些特定于语言环境的标点符号问题,但在这种情况下,数字看起来很好。此外,据我所知,外部设备甚至没有设置字符集的选项。
那么关于 Delphi 6 和国际字符集的细微差别可能会导致这个问题,可能与用户的 Windows XP/Win7 字符设置有关?请注意,我在整个程序中使用标准的 Delphi 6“字符串”转换字符串,所以我看不出多字节字符集问题如何成为根本原因。有没有人遇到过这个问题并且知道该怎么做?