У меня странная проблема, которая затрагивает, по крайней мере, некоторых из моих международных пользователей моего приложения Delphi 6.Вот сценарий:
- Моя программа периодически запрашивает отчеты о состоянии с внешнего устройства, которое действует как HTTP-сервер.
- Устройство отправляет обратно отчет о состоянии в качестве документа ответа, который имеетполя серии, разделенные символом канала в формате пары «имя-значение» (например, - field1 = -0,437).
- Я разбил строку отчета на поля и затем снова, чтобы получить каждое имя поля и числовое значение.
- Я использую StrToFloat () для преобразования значений поля с плавающей запятой в формат string и присваиваю результат этой функции переменной Variant .
Это прекрасно работает на большинстве ПК, но некоторые из моих международных пользователей получают EConvertError's , когда я пытаюсь использовать StrToFloat () для числовых значений.Вот конкретный пример сообщения об ошибке из моих журналов:
EConvertError: '-0,685' не является допустимым значением с плавающей запятой
Как вы можете видеть -0,685 - это действительное число с плавающей запятой, но я получаю исключение EConvertError.Обычно я ожидал бы увидеть запятую с десятичной точкой или какую-то другую проблему с пунктуацией, зависящую от локали, но в этом случае число кажется хорошим.Кроме того, насколько мне известно, внешнее устройство даже не имеет возможности установить набор символов.
Итак, какой тонкий нюанс в Delphi 6 и международных наборах символов может вызывать эту проблему, возможно, связанную спользовательские настройки Windows XP / Win7?Обратите внимание, что я использую стандартные строки преобразования Delphi 6 " string " во всей моей программе, поэтому я не понимаю, как проблема с многобайтовым набором символов может быть основной причиной.Кто-нибудь имел эту проблему и знает, что с этим делать?