LINUX.ORG.RU

Непонятки с кодировкой.

 


0

1

Написал скрипт для создания книжных полок в Reader-е Kobo.

В Linux (Python v3.5.2) все работает хорошо. В Windows из под debuger PyCharm (в Setting-Project intrpreter установлен 3.5.2) тоже исполняется без ошибок.

Если запускаю вот так (Python v3.5.2): c:\opt\python35\python.exe KoboShelf.py, то возникает ошибка:

        file:///mnt/sd/Books/Метро 2033/Метро-2033 00 Кобелев. Прятки с Солнцем.
        file:///mnt/sd/Books/Метро 2033/Метро-2033 47 Буторин Мутант.epub
            .   .   .   .  
            .   .   .   .  
        file:///mnt/sd/Books/Метро 2033/Метро-2033 44 Киреев Белый барс.epub
        file:///mnt/sd/Books/Метро 2033/Метро-2033 04 Дьяков К свету.epub
Traceback (most recent call last):
  File "KoboShelf.py", line 198, in <module>
    main(sys.argv)
  File "KoboShelf.py", line 190, in main
    addBook(location, book_path, f_name, c)
  File "KoboShelf.py", line 138, in addBook
    print('\t%s' % book_full_path)
  File "c:\opt\python35\lib\encodings\cp866.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2013' in position

Вот текст функции в которой возникает ошибка.

def addBook(location, book_path, f_name, cursorSQL):
    book_shelf = os.path.basename(book_path)
    addBookShelf(book_shelf, cursorSQL)
    book_full_path = location + book_path + '/' + f_name
    book_full_path = book_full_path.replace("\\", "/")
    print('\t%s' % book_full_path)     # <- вот на эту строку ссылается диагностика ошибки
    v_ShelfName = book_shelf
    v_ContentId = book_full_path
    v_DateModified = datetime.now().strftime('%Y-%m-%dT%H:%M:%S.%f%z')[:-3]
    v__IsDeleted = "False"
    v__IsSynced = "False"
    cursorSQL.execute('''INSERT INTO ShelfContent
      (ShelfName, ContentId, DateModified, _IsDeleted, _IsSynced)
      VALUES(?,?,?,?,?)''',
      ( v_ShelfName, v_ContentId, v_DateModified, v__IsDeleted, v__IsSynced )
                      )

Подскажите, в чем проблема и почему она так избирательно проявляется?



Последнее исправление: Axa (всего исправлений: 1)

В Linux (Python v3.5.2) все работает хорошо.

Потому, что в linux у тебя консолька в utf-8, а в виндах - нет.

str='\t%s' % book_full_path
try:
  print(str)
except UnicodeEncodeError:
  print(str.encode('utf-8'))
shrub ★★★★★
()
Ответ на: комментарий от shrub

Спасибо огромное.

Все работает.

Axa
() автор топика
Ответ на: комментарий от anonymous

от слова «вендуз». 8-)

А вообще я уже давно в windows ничего не делаю. Какая то противоестественная поперационка.

Axa
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.