Найти - Пользователи
Полная версия: перекодировка из OEM 866 в win1251
Начало » Python для новичков » перекодировка из OEM 866 в win1251
1 2
messsir
доброго всем времени суток.

как понятно из заголовка, снова проблема с кодировкой.
перед этим прочитал весь поиск на эту тему, все попробовал, решения так и нашел.
конечно же, я в python новичок, но уже появилась некоторая задача.

имеется такая строчка:

NAME:‡ЂЋ “¬®бЄў >23ав
.¬®в®” >24ЋЇ« в  §   /¬ Ї® „Ё«ҐабЄ®¬г ¤®Ј®
ў®>26аг Ї® бз>27Ґвг >30

если я правильно понимаю, то представлена она в OEM 866, задача отобразить ее в win1251.
если быть точнее, то задача конвертировать несколько сотен файлов в читабельный вид.

пожалуйста, подскажите, как это правильнее сделать. буду очень рад полезным ссылкам на эту тему (гуглом пользовался, толку мало)
работаю под виндой, python 3.2

заранее благодарю!
o7412369815963
'xxx'.decode('cp866').encode('cp1251')
это для py2,6, для 3,2 что-то подобное
o7412369815963
а это фокус (для запутывания)
# coding: utf8

s = """NAME:‡ЂЋ "¬®бЄў >23ав
.¬®в®" >24ЋЇ« в § /¬ Ї® „Ё«ҐабЄ®¬г ¤®Ј®
ў®>26аг Ї® бз>27Ґвг >30"""

print s.decode('utf8').encode('cp1251').decode('cp866')
result:
NAME:ЗАО "москв >23рт
.мото" >24Опл т з /м по Дилерскому дого
во>26ру по сч>27ету >30
messsir
попытался сделать так, как Вы посоветовали…
ругается на следующее:
Traceback (most recent call last):
File "C:/Python32/1", line 5, in <module>
print(s.decode('utf8').encode('cp1251').decode('cp866'))
AttributeError: 'str' object has no attribute 'decode'
если я правильно понимаю, ему не нравится то, что s строковая, а не байтовая.
такое впечатление, что

# coding: utf8
он просто не видит…

ну или я что-то не понимаю, что весьма вероятно :)

в любом случае, спасибо за помощь!
o7412369815963
Я привел пример для py2.x …, пришлось установить питон 3,2
вот 2 способа, конвертит из файла “1” в “2”
open('2','w',encoding='cp1251').write(open('1','r',encoding='cp866').read())
open('2','bw').write(open('1','br').read().decode('cp866').encode('cp1251'))
в питоне 3,2 байтовая строка указывается с буквой б: b“xxx” (тут есть decode ), но нужно что-б сам исходник был в той кодировке,
либо можно использовать так “xxx”, но сохранить файл в cp866 и написать в начале # coding: cp866
py.user.next
>>> s = """NAME:‡ЂЋ "¬®бЄў >23ав
... ... .¬®в®" >24ЋЇ« в § /¬ Ї® „Ё«ҐабЄ®¬г ¤®Ј®
... ... ў®>26аг Ї® бз>27Ґвг >30"""
>>> s
'NAME:‡ЂЋ "¬®бЄў >23ав\n... .¬®в®" >24ЋЇ« в § /¬ Ї® „Ё«ҐабЄ®¬г ¤®Ј®\n... ў®>26аг Ї® бз>27Ґвг >30'
>>> s.encode('cp1251')
b'NAME:\x87\x80\x8e "\xac\xae\xe1\xaa\xa2 >23\xe0\xe2\n... .\xac\xae\xe2\xae" >24\x8e\xaf\xab \xe2 \xa7 /\xac \xaf\xae \x84\xa8\xab\xa5\xe0\xe1\xaa\xae\xac\xe3 \xa4\xae\xa3\xae\n... \xa2\xae>26\xe0\xe3 \xaf\xae \xe1\xe7>27\xa5\xe2\xe3 >30'
>>> s.encode('cp1251').decode('cp866')
'NAME:ЗАО "москв >23рт\n... .мото" >24Опл т з /м по Дилерскому дого\n... во>26ру по сч>27ету >30'
>>>
messsir
если быть точнее, то задача конвертировать несколько сотен файлов в читабельный вид.
у приложения, в котором смотришь текст, есть отображение в кодировке
так что “читабельный вид” - понятие относительное

messsir
# coding: utf8
в третьем питоне кодировка по умолчанию utf-8

messsir
работаю под виндой, python 3.2
качай python 3.2.1
там исправлен баг input'а
http://bugs.python.org/issue12477

у меня в линуксе все файлы в utf-8 и консоль отображает в utf-8

o7412369815963
open('2','w',encoding='cp1251').write(open('1','r',encoding='cp866').read())
1) сделай import this
2) этот код не закрывает файлы
3) http://docs.python.org/py3k/reference/compound_stmts.html#the-with-statement
второ питон (http://docs.python.org/reference/compound_stmts.html#the-with-statement)
messsir
o7412369815963
Я привел пример для py2.x …, пришлось установить питон 3,2
вот 2 способа, конвертит из файла “1” в “2”
в питоне 3,2 байтовая строка указывается с буквой б: b“xxx” (тут есть decode ), но нужно что-б сам исходник был в той кодировке,
либо можно использовать так “xxx”, но сохранить файл в cp866 и написать в начале # coding: cp866
Спасибо, теперь все понятно, ясно что делал не так.
py.user.next
у приложения, в котором смотришь текст, есть отображение в кодировке
так что “читабельный вид” - понятие относительное
да, надо было уточнить. я имел ввиду, что нужно открывать в виндовском блокноте.
py.user.next
качай python 3.2.1
там исправлен баг input'а
http://bugs.python.org/issue12477
спасибо, не узнал. установил.
py.user.next
1) сделай import this
2) этот код не закрывает файлы
3) http://docs.python.org/py3k/reference/c … -statement
второ питон (http://docs.python.org/reference/compou … -statement)
благодарю за ссылки и помощь :)
o7412369815963
py.user.next
1) сделай import this
2) этот код не закрывает файлы
3) http://docs.python.org/py3k/reference/compound_stmts.html#the-with-statement
второ питон (http://docs.python.org/reference/compound_stmts.html#the-with-statement)
Этот код закрывает файлы! т.к. не происходит привязывание к пространству имен и объект разрушается сразу после выполнения. =P
Ты привел полезные ссылки, тебе стоит их почитать.
messsir
o7412369815963
Ты привел полезные ссылки, тебе стоит их почитать.
уже читаю :)
py.user.next
o7412369815963
Ты привел полезные ссылки, тебе стоит их почитать.
я уточню ещё точнее

http://docs.python.org/py3k/reference/datamodel.html
Objects are never explicitly destroyed; however, when they become unreachable they may be garbage-collected. An implementation is allowed to postpone garbage collection or omit it altogether — it is a matter of implementation quality how garbage collection is implemented, as long as no objects are collected that are still reachable.
Some objects contain references to “external” resources such as open files or windows. It is understood that these resources are freed when the object is garbage-collected, but since garbage collection is not guaranteed to happen, such objects also provide an explicit way to release the external resource, usually a close() method. Programs are strongly recommended to explicitly close such objects. The ‘try…finally‘ statement and the ‘with‘ statement provide convenient ways to do this.
o7412369815963
Этот код закрывает файлы! т.к. не происходит привязывание к пространству имен
на чём основано данное утверждение ?
наверное, ты думаешь, что сборщик мусора, собравший объекты этих файлов, равен их закрытию ?
но что будет, если этот код окажется в каком-нибудь цикле, а сборщик мусора не успеет добраться до этих объектов ?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB