В процессе написания небольшой тулзы для себя столкнулся с граблями при чтении/записи unicode строк полученых из QT-ишного элемента управления в xml и назад. Полдня потратил на раскапывание причин и борьбу с ними.
Проблема в том, что не все так просто как хочется... QtString хоть и Unicode, а всё таки не тот же класс, что и python.unicode строка. Следовательно, надо явно преобразовывать к типу python.unicode строки. Функция writexml (для сохранения xml) - пишет данные в xml в utf-8 по умолчанию, но при этом "случайно" забывает указать это в заголовке xml-файла. А соответственно для возможности использования этого xml из других приложений надо явно прописывать кодировку для записи.
Вот и приходится по коду таскать явное указание на кодировку и проводить явные преобразования типов.
qtString = ... #получение объекта строки
unString = unicode(qtString)
unencString = unString.encode('utf-8')
...
with open(r'test.xml', 'w') as configFile :
newdoc.writexml(configFile, addindent='\t', newl='\n', encoding='utf-8')
Хорошо, что хоть при чтении из xml и вставке результата в QString схожей проблемы нет.
P.S.
Совет на будущее себе при работе с xml в кодировке utf-8 - не пытаться делать update, проще пересоздать файл заново уже с новыми значениями. - Из-за этого потерял ещё полдня к упомянутым выше. Но это уже отдельная песня об уставшем мозге, которую лучше не исполнять...
Совет на будущее себе при работе с xml в кодировке utf-8 - не пытаться делать update, проще пересоздать файл заново уже с новыми значениями. - Из-за этого потерял ещё полдня к упомянутым выше. Но это уже отдельная песня об уставшем мозге, которую лучше не исполнять...
Комментариев нет:
Отправить комментарий