Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перевод файла из CP1251 в UTF-8, на ходу 
V
    Опции темы
cupper
Дата 3.8.2009, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: нет
Всего: 1



подскажите пожалуства как решить проблемму:
есть файл, в виндовой кодировке CP1251, я работаю за линуксом
Код

f1 = open(filename, "r")
temp = f1.readline()
print temp

ну и соотвественно он мне там где встречаються русские буквы выводит какозябру.
манипуляции с encode и decode не дали результата.
Как мне перевести файл в UTF-8 ?

А лучьше, чтобы считанную строку сразу приводить (перекодировать) из CP1251 в UTF-8 что бы с ней работать, и записать потом в файл. В гугле находил разрозненные отрывки кода которые там и несмог применить. 
Заранее спасибо.
PM MAIL   Вверх
powerfox
Дата 3.8.2009, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 97



Можно так:
Код

temp = f1.readline().decode('windows-1251')
f2 = open(newfile, 'w')
f2.write(temp.encode('utf-8'))


encode() можно, в принципе, дописать после decode().


--------------------
user posted image
PM WWW   Вверх
cupper
Дата 3.8.2009, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: нет
Всего: 1



ну вот как раз таким образом я и пробывал, но пишет в файл
тПНКНБЮЙ  а если проста то там другая кракозябра, может я чего недогоняю ?


Это сообщение отредактировал(а) cupper - 3.8.2009, 22:18
PM MAIL   Вверх
powerfox
Дата 3.8.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 97



Цитата(cupper @  3.8.2009,  23:15 Найти цитируемый пост)
может я чего недогоняю ?

Значит в файле не CP-1251.


--------------------
user posted image
PM WWW   Вверх
cupper
Дата 3.8.2009, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: нет
Всего: 1



отличнае идея smile 
вот только опенофис открывает его как CP1251 и все ништяк. 
Возможно при открытие файла нужно указывать что он CP1251, но как ?

Это сообщение отредактировал(а) cupper - 3.8.2009, 23:14
PM MAIL   Вверх
_Viper_
Дата 4.8.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 8.11.2006

Репутация: 10
Всего: 11



Цитата(cupper @  3.8.2009,  22:15 Найти цитируемый пост)
ну вот как раз таким образом я и пробывал, но пишет в файлтПНКНБЮЙ  а если проста то там другая кракозябра, может я чего недогоняю ?

Код правильный 100%, а крякозябрики очень похожи на неправильно открытый utf-8, может ты его как CP1251 открываешь ;)

Это сообщение отредактировал(а) _Viper_ - 4.8.2009, 13:44
PM MAIL   Вверх
cupper
Дата 4.8.2009, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: нет
Всего: 1



может быть, домой приду перепроверю
PM MAIL   Вверх
powerfox
Дата 4.8.2009, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 97



Цитата(cupper @  3.8.2009,  23:53 Найти цитируемый пост)
Возможно при открытие файла нужно указывать что он CP1251, но как ?

Такого API у open нет, на сколько я помню. Да и не нужно: всё, что должно делать такое низкоуровневое чтение, так это читать байты, а уже ваше дело их интерпретировать.

Погуглив немного, нашёл такой совет: http://coding.derkeiler.com/Archive/Python...2/msg00689.html


--------------------
user posted image
PM WWW   Вверх
nerezus
Дата 4.8.2009, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 1
Всего: 43



А чем не устраивает обычный вариант?

print unicode(open('c:\\t.txt').read(), 'cp1251').encode('utf-8')


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
cupper
Дата 4.8.2009, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: нет
Всего: 1



короче у меня какойто гемор не в коде, а в тоам где и как я храню данные, нечего неполучаеться из выше описанного. Плюнул на все, открыл опен офисом в CP1251 и от тудова все перекопировал в файл, теперь все работает smile  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0957 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.