Добрый день. Интересует способ использовать utf16 в строках в исходнике (без костылей которые я могу придумать, но будет больно поддерживать).Указание кодировки в формате
# -*- coding: utf16 -*-не работает (пару лет назад работало): если файл с BOM, то пишетSyntaxError: Non-UTF-8 code starting with '\xff' in file ../../tx_utf16.py on line 1, but no encoding declared;если безSyntaxError: Non-UTF-8 code starting with '\xff' in file ../../tx_utf16.py on line 4194, but no encoding declared;естественно это не utf-8 это utf-16, и я указал кодировку. Зачем он тупит?
SyntaxError: Non-UTF-8 code starting with
> '\xff' in file ../../tx_utf16.py on line 4194, but no encoding declared;
Python 3 по умолчанию использует UTF-8, скорее всего на строчке 4194 у вас данные которые написаны не в UTF-8 кодировке. Попробуйте использовать конструкции decode/encode чтобы перевести в правильной кодировке данные программе.
В той строчке у меня комментарий, расшифровывающий юникодные символы, отличающиеся между платформами. Они корректные только в utf16. Я в принципе пока это обошёл, но чувствую на виндоус опять словлю проблем. Я так понял в python3 все строки (включая комментарии) расшифровываются в utf8 внутри? Во 2 можно было выбирать любую кодировку, в том числе для операций с файловыми путями.
Проблемы у меня от того, что мне нужно обработать утф8 файлы с виндоус, некорректные в линуксе, на линуксе, потом вернуть их обратно и отправить на виндоус. Выполняю очень технологичную замену символов при чтении и обратную замену при записи, ну и конечно в коде только коды символов/байтов. Я не в восторге, если честно, да и кто знает какие ещё там последовательности криво отображаются между платформами. Спасибо хоть интернет у нас на линуксе -- разгребать юникодные косяки IIS было бы ещё печальней.
> в python3 все строки (включая комментарии) расшифровываются в utf8 внутри? Во
> 2 можно было выбирать любую кодировку, в том числе для операций
> с файловыми путями.да в 3м все в utf8. во 2й версии если юникод то приходилось типа u'бла бла бла' писать.
Там в коде полно артефактов времён второй версии. Просто мне был нужен utf16 вместо utf8, а получается нельзя иметь декодированные строки в нём (при конвертации корректный utf16 превращается в некорректный платформозависимый utf8), во всяком случае в ряде внешних либ. Насчёт комментариев я погорячился, это докстринг, но трейс указывает куда угодно, только не на место проблемы. В общем, я разобрался, целиком мой косяк, я отвлёкся на артефакты, перепутал различные проблемы, и искал совсем не там, где стоило бы. А ещё лучше не работать с питоном на венде/маке, лучше насовать немного костылей на линуксе, но зато корректно работать везде будет.