![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Litkevich Yuriy |
![]()
Сообщение
#1
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Задача, скопировать несколько файлов в некий каталог.
Подводные камни: * имя исходного файла относительно текущего каталога * имя исходного файла содержит кириллицу * имя исходного файла содержит пробелы структура ФС: -doc -folder_1/file раз.txt -folder_1/file два.txt -folder два/file раз.txt -folder два/file 2.txt нужно все файлы скопировать в каталог doc Код для теста наваял такой:
К консоли винды получаю такое:
В IDLE:
А вот если не изменяя самого исходника, поменять кодировку файла на ANSI (т.е. и запись о кодировке UTF-8 оставить неизменной) то вывод в IDLE будет:
Т.е. выводится корректный текст, но файлы всё-равно не видит. |
|
|
igor_bogomolov |
![]()
Сообщение
#2
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
Так ты же кавычки в имя файла запихал
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#3
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
вот к чему привёл метод научного тыка:
* экранированные кавычки - ненужны. * если кодировка исходника CP1251, то всё корректно работает с кириллицей, не взирая на то, что в начале файла есть запись о кодировке UTF-8. Но надо бы делать по правильному - заявленная кодировка должна соответствовать реальной. в случае с Qt, можно было бы воспользоваться QObject::trUtf8(). Однако питону явно указано в какой кодировке файл. Тут я что-то совсем не пойму. П.С. Питон 2.6 |
|
|
igor_bogomolov |
![]()
Сообщение
#5
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
* экранированные кавычки - ненужны. Ну это мы уже выяснили. Так ты же кавычки в имя файла запихал Было бы странно, если бы они были нужны. Мы же не в консоли команду вводим. Ты же не делаешь в Qt так: Такой код тоже файла не найдет, даже если он существует. Все по тем же причинам (кавычки в имени файла).* если кодировка исходника CP1251, то всё корректно работает с кириллицей, не взирая на то, что в начале файла есть запись о кодировке UTF-8. Так если у тебя файл в кодировке cp1251, почему интерпретатору ты говоришь иначе? Пиши такНо надо бы делать по правильному - заявленная кодировка должна соответствовать реальной.
Ну и что бы завершить тему. Представим ситуацию. Файл у нас в кодировке cp1251. Система/консоль в UTF8. Этот код не найдет существующий файл. К тому же на консоль выведет кракозябры. Что бы всё работало так как задумано , нужно писать так
Но это надуманный пример. В реальной ситуации такого быть не должно. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#6
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
igor_bogomolov |
![]()
Сообщение
#7
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
пример не понял. В какой кодировке исходник? В cp1251. В сообщении дважды это указано, на словах и в кодеЦитата('Litkevich Yuriy' date='19.5.2011 @ 8:07' post=49834) потому-что он изначально был в UTF-8 Что то ты запутался в кодировках и меня запутал. В общем так. Если ты используешь кириллицу в файле *.py, ты должен явно указывать кодировку этого файла. Делается это так: # -*- coding: cp1251 -*-. Далее, если у тебя кодировка консоли (это пример) отличается от кодировки исходников, при выводе сообщения с кириллицей на экран ты увидишь просто набор не читаемых символов. Если ты хочешь увидеть реальное сообщение делай так
Поэкспериментируй немного с функцией decode и кодировками файла и все встанет на свои места. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#8
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Что то ты запутался в кодировках и меня запутал. я изначально написал исходник в кодировке utf-8 и соответсвующим образом пометил во второй строке файла.Если ты хочешь увидеть реальное сообщение делай так а если я не хочу вывода в консоль, а просто копирую файлы? всё равно нужно использовать decode()?
Поэкспериментируй немного с функцией decode и кодировками файла и все встанет на свои места. |
|
|
igor_bogomolov |
![]()
Сообщение
#9
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 16.3.2025, 22:46 |