Отсутствуют кодеки Unicode на kivy / Python на Android?

У меня есть программа под управлением kivy, которая отлично работает на Windows, но не открывается при открытии файла на Android (1.8.0 на обеих платформах). Странно то, что сообщение об ошибке указывает, что он пытается декодировать ASCII, когда я просто прошу utf-8; Также файл не имеет символа 0xFF в любом месте – я проверил с помощью утилиты od .

Код:

 try: Logger.info('Mark: opening file ' + repr(filename)) with codecs.open(filename, 'r', encoding='utf_8') as f: lines = [line.rstrip(u'\r\n').lstrip(codecs.BOM) for line in f] except UnicodeDecodeError as e: Logger.info('Mark: utf8 load failed: ' + str(e)) with codecs.open(filename, 'r', encoding='cp1252') as f: lines = [line.rstrip(u'\r\n') for line in f] 

Файл журнала:

 [INFO ] Mark: opening file '/mnt/sdcard/My Files/Documents/DVDs.txt' [INFO ] Mark: utf8 load failed: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128) [INFO ] Base: Leaving application in progress... [WARNING ] stderr: Traceback (most recent call last): [WARNING ] stderr: File "main.py", line 295, in <module> [WARNING ] stderr: app.run() [WARNING ] stderr: File "/home/tito/code/python-for-android/build/python-install/lib/python2.7/site-packages/kivy/app.py", line 792, in run [WARNING ] stderr: File "/home/tito/code/python-for-android/build/python-install/lib/python2.7/site-packages/kivy/base.py", line 481, in runTouchApp [WARNING ] stderr: File "/home/tito/code/python-for-android/build/python-install/lib/python2.7/site-packages/kivy/core/window/window_pygame.py", line 381, in mainloop [WARNING ] stderr: File "/home/tito/code/python-for-android/build/python-install/lib/python2.7/site-packages/kivy/core/window/window_pygame.py", line 287, in _mainloop [WARNING ] stderr: File "/home/tito/code/python-for-android/build/python-install/lib/python2.7/site-packages/kivy/base.py", line 321, in idle [WARNING ] stderr: File "/home/tito/code/python-for-android/build/python-install/lib/python2.7/site-packages/kivy/clock.py", line 422, in tick [WARNING ] stderr: File "/home/tito/code/python-for-android/build/python-install/lib/python2.7/site-packages/kivy/clock.py", line 537, in _process_events [WARNING ] stderr: File "/home/tito/code/python-for-android/build/python-install/lib/python2.7/site-packages/kivy/clock.py", line 309, in tick [WARNING ] stderr: File "main.py", line 266, in select_file_part2 [WARNING ] stderr: with codecs.open(filename, 'r', encoding='cp1252') as f: [WARNING ] stderr: File "/home/tito/code/python-for-android/build/python-install/lib/python2.7/codecs.py", line 884, in open [WARNING ] stderr: LookupError: unknown encoding: cp1252 

Изменить: я ввел код отладки, чтобы пройти весь список и обнаружил, что все пропало без использования ascii , latin_1 и различных кодеков utf .

Избавьтесь от try / except и посмотрите на реальное исключение. codecs.BOM является байтовой строкой \xff\xfe и ее принудительно \xff\xfe в Unicode с использованием кодека ascii по умолчанию:

 >>> import codecs >>> codecs.BOM '\xff\xfe' >>> u'test'.lstrip(codecs.BOM) Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)