Delphi6アプリケーションの海外ユーザーの少なくとも一部に影響を及ぼしている奇妙な問題が発生しています。シナリオは次のとおりです。
- 私のプログラムは、HTTPサーバーとして機能する外部デバイスから定期的にステータスレポートを要求します。
- デバイスは、名前と値のペアの形式でパイプ文字で区切られた一連のフィールドを持つ応答ドキュメントとしてステータスレポートを送り返します(例:--field1 = -0.437)。
- レポート文字列をフィールドに分割してから、もう一度各フィールド名と数値を取得します。
- StrToFloat()を使用して、浮動小数点フィールドの値を文字列形式に変換し、その関数の結果をVariant変数に割り当てます。
これはほとんどのPCで正常に機能しますが、数値でStrToFloat()を使用しようとすると、一部の海外ユーザーにEConvertErrorが発生します。これが私のログからのエラーメッセージの具体例です:
EConvertError:'-0.685'は有効な浮動小数点値ではありません
ご覧のとおり、-0.685は有効な浮動小数点数ですが、EConvertError例外が発生しています。通常、小数点がある場所にコンマが表示されるか、その他のロケール固有の句読点の問題が発生することが予想されますが、この場合、数値は正常に表示されます。また、私の知る限り、外部デバイスには文字セットを設定するオプションさえありません。
では、Delphi 6と国際的な文字セットに関する微妙なニュアンスがこの問題を引き起こしている可能性があります。おそらく、ユーザーのWindows XP/Win7の文字設定に関連しているのでしょうか。プログラム全体で標準のDelphi6" string "キャスト文字列を使用しているため、マルチバイト文字セットの問題が根本的な原因である可能性がないことに注意してください。誰かがこの問題を抱えていて、それについて何をすべきか知っていますか?