Проблемы с кодировкой DefaultFormatSettings

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Проблемы с кодировкой DefaultFormatSettings

Сообщение ssl » 27.07.2013 10:27:59

Lazarus 1.1 r42211M FPC 2.6.2 i386-win32-win32/win64
WinXP 32 русская.
При старте в DefaultFormatSettings строки читаются ANNSI-шные, 1251, а методы библиотек ожидают там UTF8, в результате вместо имён месяцев получаем строки вопросительных знаков.
Если DefaultFormatSettings перекодировать брутфорсом:
Код: Выделить всё

for i:= low(LongMonthNames) to High(LongMonthNames) do
    LongMonthNames[i]:= a2s(LongMonthNames[i]);

- всё исправляется (a2s - это моя AnsiToUTF8String).

Для ThousandSeparator, кстати, у меня установлен пробел, а получаю я символ #160, что странно: пробел- он и в Африке пробел (#32)!
ssl
новенький
 
Сообщения: 59
Зарегистрирован: 17.05.2005 11:27:01

Re: Проблемы с кодировкой DefaultFormatSettings

Сообщение Лекс Айрин » 27.07.2013 11:23:13

ssl писал(а):Для ThousandSeparator, кстати, у меня установлен пробел, а получаю я символ #160, что странно: пробел- он и в Африке пробел (#32)!


Это тоже пробел, но только неразрывный.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Проблемы с кодировкой DefaultFormatSettings

Сообщение ssl » 27.07.2013 12:29:02

Лекс Айрин писал(а):Это тоже пробел, но только неразрывный.


Да я "за"!!! :)
Только отображается он все равно как знак вопроса. В том же TCurrencyEdit, например.
ssl
новенький
 
Сообщения: 59
Зарегистрирован: 17.05.2005 11:27:01

Re: Проблемы с кодировкой DefaultFormatSettings

Сообщение amateur » 27.07.2013 13:16:24

а если использовать
UTF8Encode(LongMonthNames[i])
а не a2s результат такой же ?

Добавлено спустя 3 минуты 50 секунд:
он и в Африке пробел (#32)!
угу, как и Enter (сарказм :twisted: ).
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Re: Проблемы с кодировкой DefaultFormatSettings

Сообщение ssl » 27.07.2013 13:30:07

amateur писал(а):UTF8Encode(LongMonthNames[i])

Такой же. В смысле, это тоже работает.
А вот ThousandSeparator, естественно, остаётся #160 и в UTF8, и отображается (в контролах) как знак вопроса.
ssl
новенький
 
Сообщения: 59
Зарегистрирован: 17.05.2005 11:27:01

Re: Проблемы с кодировкой DefaultFormatSettings

Сообщение amateur » 27.07.2013 16:56:58

смысл не одинаков...
UTF8Encode - это дефолт лазаря, а то что у Вас - Х. Т.е. не известная Ваша реализация...

и то что отображает ThousandSeparator то же не известно в Вашей реализации...

Добавлено спустя 3 минуты 40 секунд:
кстати: первоначально у Вас было 32, а теперь 160, а что потом :lol:
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Re: Проблемы с кодировкой DefaultFormatSettings

Сообщение ssl » 27.07.2013 20:25:54

amateur писал(а):смысл не одинаков...

Нешто я так невнятно пишу?
Уважаемый, смысл совершенно в другом: Лазарь (или ФПЦ) под виндой инициализирует поля DefaultFormatSettings в ANSI - кодировке. А его же функции форматирования (и контролы) ожидают там - UTF8. Что я и подтвердил, перекодировав строковые поля DefaultFormatSettings.
По хорошему-то эта перекодировка должна выполняться сразу, в процедуре GetLocaleFormatSettings. А ещё лучше - использовать в GetLocaleStr не GetLocaleInfo, а сразу GetLocaleInfoW, с дальнейшим преобразованием utf16 в utf8. Что б вообще без ANSI-кодировок.
ssl
новенький
 
Сообщения: 59
Зарегистрирован: 17.05.2005 11:27:01

Re: Проблемы с кодировкой DefaultFormatSettings

Сообщение amateur » 27.07.2013 21:14:04

1. Лазарь чисто теоретически ютф. На практике моно голову сломать...
2. Вы написали что используете свою функцию (я предложил дефолтную). В лине данный вариант не нужен.
3. А вот с пробелом и другими конролами (конкретно TCurrencyEdit в Вашем варианте) х.з. что у Вас там происходит. Конкретно у меня данный вариант вопроса не давал никаких причин для проблем.

п.с.
Про данный конкретный случай уже писалось на форуме (Америку, к сожалению, Вы не открыли). Сами разрабы говорят о частичной поддержке ютф. Плюс, советую пользоваться фпс 2.7.1 (много нового, добавились глюки и т.д.).
И вот это:
По хорошему-то
для кого по хорошему? Латиница - нормально отображается. Вот и нет причин для беспокойства. А то что у Вас проблема с кириллицей, сам лазарь предлагает варианты решения. Нуно знать правила (для нас - баг) и корректно пользовать.
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 232

Рейтинг@Mail.ru