Skip to content
This repository has been archived by the owner on Jun 11, 2021. It is now read-only.

'ascii' codec can't decode byte 0xca in position 9: ordinal not in range(128) #1

Open
constb opened this issue Mar 10, 2013 · 6 comments

Comments

@constb
Copy link

constb commented Mar 10, 2013

сабжевое сообщение об ошибке в процессе скачивания фотографии. win8 x64, python 2.7.3

@ivanyu
Copy link
Contributor

ivanyu commented Mar 10, 2013

Полагаю, дело в том, что где-то в названии альбома есть не-ASCII-символ, виндовая консоль без плясок с бубном не примет.
Быстрое, но не самое чистое решение — проверять, работаем ли мы в винде, и делать album['title'].encode(sys.stdout.encoding, 'replace') в 153 и 173 строках. Но по-хорошему должен быть какой-то пакет, который решает эту старую проблему.

@constb
Copy link
Author

constb commented Mar 10, 2013

дело не в консоли, а в файловой системе. закомментил exception handler и...

Traceback (most recent call last):
  File "vkporter.py", line 165, in <module>
    output = os.path.join(args.output, album['title'])
  File "C:\Python27\lib\ntpath.py", line 108, in join
    path += "\\" + b
UnicodeDecodeError: 'ascii' codec can't decode byte 0xca in position 9: ordinal not in range(128)

@ivanyu
Copy link
Contributor

ivanyu commented Mar 10, 2013

Хм, вероятно.
Там можно тоже самое сделать, только вместо replaceignore, например, т.к. replace заменяет на "?"

@constb
Copy link
Author

constb commented Mar 10, 2013

тут другой вопрос - а с чего это я не могу в os.path использовать не-ascii имена папок? os.path.supports_unicode_filenames = True, я проверял.

@constb
Copy link
Author

constb commented Mar 10, 2013

причём с консоли всё ок.

Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import os.path
>>> os.path.dirname(u'C:\\Users\\Костя\\Downloads\\vk\\vkporter.py')
u'C:\\Users\\\xca\xee\xf1\xf2\xff\\Downloads\\vk'
>>> os.path.join(os.path.dirname(u'C:\\Users\\Костя\\Downloads\\vk\\vkporter.py'), 'exported')
u'C:\\Users\\\xca\xee\xf1\xf2\xff\\Downloads\\vk\\exported'
>>> os.path.abspath(os.path.join(os.path.dirname(u'C:\\Users\\Костя\\Downloads\\vk\\vkporter.py'), 'exported'))
u'C:\\Users\\\xca\xee\xf1\xf2\xff\\Downloads\\vk\\exported'
>>> os.path.join(os.path.abspath(os.path.join(os.path.dirname(u'C:\\Users\\Костя\\Downloads\\vk\\vkporter.py'), 'exported')), u'да чтоп тебя!')
u'C:\\Users\\\xca\xee\xf1\xf2\xff\\Downloads\\vk\\exported\\\xe4\xe0 \xf7\xf2\xee\xef \xf2\xe5\xe1\xff!'
>>> 

не понимаю. единственное отличие – с консоли путь я указываю руками. там какой-то хитрый попадос с __file__ что ли?

@azhurb
Copy link

azhurb commented Jul 26, 2013

Была аналогичная проблема под Debian, python 2.6.6 - 'ascii' codec can't encode characters in position 11-18: ordinal not in range(128)
Вылечилось комментированием строки https://github.com/amka/VKPorter/blob/master/vkporter.py#L181
Тут решение http://stackoverflow.com/questions/8016236/python-unicode-handling-differences-between-print-and-sys-stdout-write

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants