Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 2, 2015 23:34:19

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Копирование файлов

Kon52
Доки нужно не только читать, но еще и понимать

Igorsk
как быть ?
Курить и курить и курить кодировки, что они, зачем они, откуда и куда они…

import shutil
shutil.copy(u'c:\\привет.txt', u'd:\\привет.txt')

Вот так работает
В двух словах - shutil хочет unicode, а вы ему utf-8

JOHN_16
кодировка файла соответствовала указанной

Вы явно решили запутать топикстартера и себя…
1. IDE сохранит и загрузит в той кодировке, что писали. В данном случае cp1251
2. Интерпретатор правильно переводит ее в utf-8, как и заявлено в заголовке.
3. Косяк топикстартера в том, что shutil хочет unicode, а не utf-8
4. Пересохранив файл в “нужно что бы файл кодировка файла соответствовала указанной” (слова и пунктуация автора цитаты сохранены)
Получим что интерпретатор думая, что читает системную cp1251, прочитает utf-8 и получит абракадабру…

Офлайн

#2 Ноя. 3, 2015 01:05:09

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Копирование файлов

Iskatel
да ? Тогда почему, по вашему мнению следующий файл с кодом сгенерирует ошибку Uniocode ?



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Прикреплённый файлы:
attachment test2.py (66 байт)

Офлайн

#3 Ноя. 3, 2015 02:10:21

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Копирование файлов

JOHN_16
да ? Тогда почему, по вашему мнению следующий файл с кодом сгенерирует ошибку Uniocode ?
Вы бы хоть ваш трейсбэк предоставили, у меня выводит:

u'\u041f\u0440\u0438\u0432\u0435\u0442'
Привет


ЗЫ. это тот файл?

# -*- coding: utf-8 -*-
s = u'Привет'
print(repr(s))
print(s)

а то прикрепляете какбудто вирус Что мешает в форум вставить?

Отредактировано Iskatel (Ноя. 3, 2015 02:13:43)

Офлайн

#4 Ноя. 3, 2015 02:24:58

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Копирование файлов

Iskatel
Что мешает в форум вставить?
В файле исходная кодировка. При постинге на форум исходная кодировка потеряется.
Вот трейсбек
C:\>test2.py
File “C:\test2.py”, line 3
s = u'╧ЁштхЄ'
SyntaxError: (unicode error) ‘utf8’ codec can't decode byte 0xcf in position 0:
invalid continuation byte
Iskatel
а то прикрепляете какбудто вирус
вы же видите что там *.py файл.

Поставлю вопрос по другому. Скачайте файл и запустите его. Объясните почему произошла ошибка.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Ноя. 3, 2015 02:37:23

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Копирование файлов

JOHN_16
Объясните почему произошла ошибка.

Подозреваю из-за того что вы перемудрили, и “перевели файл в указанную кодировку”, о чем я и писал выше…

ЗЫ. героически преодолевать специально придуманные трудности это конечно “социалистический олдскул”
Но немогли бы вы описать подробности того проишествия, в результате которого данный файл получился?

Отредактировано Iskatel (Ноя. 3, 2015 02:40:35)

Офлайн

#6 Ноя. 3, 2015 04:01:37

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Копирование файлов

Iskatel
это не я придумал. Это одна из распространенных ошибок тех кто приступают к языку. Алгоритм очень прост - открывается текстовый редактор, который пишет код в кодировке по умолчанию. Для WindowsXP это будет cp1251, по не знанию вставляется в начала строчка с указанием кодировки вида #-*- coding:utf-8 -*- потому что именно такая встречается в интернете. Итог мы имеем файл с исходным кодом кодированным в cp1251, а интерпретатору указано UTF-8.

И сарказм здесь вообще не уместен, а на этот форуме давно, и к периодическим таким вот ошибкам от новичков привык. На StackOverflow также придостаточно подобных вопросов. Отсюда вывод, что проблема есть.

Вы не правы.

Iskatel
В данном случае cp1251
2. Интерпретатор правильно переводит ее в utf-8, как и заявлено в заголовке.
Вот тот самый PEP который объясняет как все устроено.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#7 Ноя. 3, 2015 20:04:30

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Копирование файлов

JOHN_16
Чукча не читатель
я пропустил “если запускаю файл через IDLE (Python GUI) все работает но если запускаю файлик с этим кодом просто ( так скажем с рабочего стола)”

Прошу пардона.

Офлайн

#8 Ноя. 5, 2015 09:15:36

Igorsk
Зарегистрирован: 2015-10-30
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Копирование файлов

JOHN_16
Специально выкладываю в виде отдельного файла

Огромное спасибо!!!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version