![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
kin63camapa |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 32 Регистрация: 21.8.2010 Пользователь №: 1976 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Столкнулся со странным поведением QSettings на юникоде, если файл в ascii все ok, cp1251 не детектит, но какбэ и не обязан. Но вот если файл в юникоде парсер делает вид что в файле пусто allKeys().size==0. Сначала думал что он bom не распознаёт, сделал костыль
Раскрывающийся текст
Костыль дал нормальную работу только на utf-8 на UTF-16LE и UTF-16BE QSettings говорит что нет никаких значений у тя в файле, иди лесом. Думаю дай хоть гляну что ему нужно на вход подсовывать:
На выхлопе:
Но и это ещё не все, в созданном файле вообще черт пойми какая кодировка притом без BOM
Собственно вопрос чо делать та? зы и если кто знает как заставить QSettings работать с UTF-7, UTF-8-EBCDIC и SCSU поделитесь, о-о-о-очень надо Сообщение отредактировал kin63camapa - 9.12.2014, 18:58 |
|
|
![]() |
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Меня реализация QSettings бесит давно и основательно.
Всё что нужно было сделать это конструктор: QSettings ( const QIODevice & iodevice, QObject * parent = 0 ) вместо QSettings ( const QString & fileName, Format format, QObject * parent = 0 ) тогда мы могли бы читать файл в QBuffer предварительно преобразовав кодировку (но внутрянка получается сложнее, поэтому делать так троли не стали). Выход из положения - зарегистрировать свой формат, через registerFormat() по сути создаёшь две функции, чтения и записи из/в файла и регистрируешь их связывая с условным форматом. В функция чтения/записи реализуешь механизм перекодирования. В общем-то не сложно и можно эту кухню вынести в отдельную пару .cpp/.h Сообщение отредактировал Litkevich Yuriy - 9.12.2014, 20:09 |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 8.4.2025, 15:56 |