Уведомления

Группа в Telegram: @pythonsu

#1 Май 13, 2010 20:44:30

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

Определить кодировку файла.

Эту штуку пробовали? http://forum.script-coding.info/viewtopic.php?id=2536
Есть достойные альтернативы “в комплекте”?

Задача стоит сабжевая. Возникли проблемы при перезаписывании изменённого текста из файла в юникоде. В папочке, где хозяйничает скрипт, лежат файлы в разных кодировках. Соответственно, и подход им нужен разный, так ведь?



Офлайн

#2 Май 13, 2010 21:45:28

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

Определить кодировку файла.

Делаем unicode( content, “utf8” ). Словили UnicodeDecodeError? Делаем unicode( content, “cp1251” ). Опять UnicodeDecodeError? Изобретаем что-нибудь еще.
Но лучше chardet.



Офлайн

#3 Май 14, 2010 09:51:22

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

Определить кодировку файла.

Перед тем, как задать вопрос я морально приготовился растирать по лицу вашу слюну.
Разве unicode( content, “cp1251” ) не делает юникод из кодировки ср1251? Тогда зачем мне из юникода делать юникод? Вернее нет, не так. Почему это работат?



Офлайн

#4 Май 14, 2010 10:14:50

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

Определить кодировку файла.

ибо utf8 и unicode не одно и тоже.



Офлайн

#5 Май 14, 2010 10:20:07

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

Определить кодировку файла.

UsCr
Разве unicode( content, “cp1251” ) не делает юникод из кодировки ср1251



Офлайн

#6 Май 14, 2010 10:30:17

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

Определить кодировку файла.

делает если это возможно и не указаны параметры типа ignore, replace



Офлайн

#7 Май 14, 2010 11:13:26

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

Определить кодировку файла.

Ну так если файл в юникоде, то я и читаю из него юникод, да? Проблемы возникают именно при чтении юникода. Получаю такой вот файл:

Windows Registry Editor Version 5.00
਍ഀഀ
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\NEWHASP\Services\Emulator\HASP\Dump\4E3110E4]
਍∀一愀洀攀∀㴀∀㄀℀㨄ἀ䀄㔄㐄㼄䀄㠄伄䈄㠄㔄 㠀⸀ 㬀 ᬀ㠄䘄㔄㴄㜄㠄伄 㴀〄 䄀㔄䀄㈄㔄䀄 㼀䀄㠄㬄㸄㘄㔄㴄㠄㤄∄ഀഀ
"Copyright"="GROOVY"
਍∀䌀爀攀愀琀攀搀∀㴀∀ ㄀⸀ ㄀⸀㈀  㔀   㨀  ∀ഀഀ
"Type"=dword:00000001
਍∀䴀攀洀漀爀礀∀㴀搀眀漀爀搀㨀       ㄀ഀഀ
"SecTable"=hex:09,42,45,46,a1,e2,e5,e6
਍∀匀一∀㴀搀眀漀爀搀㨀 㠀攀搀㄀攀㌀㈀ഀഀ
"Data"=hex:01,00,00,00,00,00,00,30,4c,38,68,e9,a2,ad,b3,2a,8f,d6,2a,f9,01,42,\
਍  昀戀Ⰰ㈀㈀Ⰰ㌀昀Ⰰ挀㤀Ⰰ㐀㔀Ⰰ㜀㔀Ⰰ戀愀Ⰰ㤀㌀Ⰰ㔀㘀Ⰰ㔀戀Ⰰ搀愀Ⰰ 愀Ⰰ㜀㜀Ⰰ昀㠀Ⰰ 戀Ⰰ 昀Ⰰ㔀㄀Ⰰ戀㜀Ⰰ㠀㄀Ⰰ 攀Ⰰ㐀㄀Ⰰ㔀㤀Ⰰ㄀搀Ⰰ戀㄀Ⰰ㜀㘀Ⰰ尀ഀഀ
4a,d7,45,36,13,07,44,73,dd,29,02,59,d9,6f,d5,2d,42,25,23,c3,43,e7,61,e9,a1,\
਍  攀搀Ⰰ㤀㜀Ⰰ愀㔀Ⰰ㄀㔀Ⰰ㄀㠀Ⰰ昀搀Ⰰ㔀㐀Ⰰ挀㤀Ⰰ攀㠀Ⰰ㤀㠀Ⰰ㘀㌀Ⰰ挀㌀Ⰰ㈀挀Ⰰ㌀挀Ⰰ㘀愀Ⰰ 昀Ⰰ昀昀Ⰰ戀㔀Ⰰ㜀戀Ⰰ㌀昀Ⰰ㜀㤀Ⰰ攀昀Ⰰ㄀㔀Ⰰ㐀㤀Ⰰ㔀㘀Ⰰ尀ഀഀ
72,e2,c8,e5,3f,0d,61,17,9a,c1,11,e2,66,c1,b1
਍∀一攀琀䴀攀洀漀爀礀∀㴀栀攀砀㨀 ㌀Ⰰ  Ⰰ㜀 Ⰰ  Ⰰ ㈀Ⰰ昀昀Ⰰ  Ⰰ  Ⰰ昀昀Ⰰ昀昀Ⰰ昀昀Ⰰ昀昀ഀഀ
"Option"=hex:01,01,02,4a,1f,00,00,00,00,00,00,00,00,c9
਍∀䔀䐀匀琀爀甀挀琀∀㴀栀攀砀㨀攀 Ⰰ㐀㤀Ⰰ 㐀Ⰰ昀㈀Ⰰ戀 Ⰰ 㤀Ⰰ㄀ Ⰰ昀㈀Ⰰ 㘀Ⰰ㈀愀Ⰰ挀㈀Ⰰ㤀攀Ⰰ㠀㌀Ⰰ戀㠀Ⰰ㐀 Ⰰ㌀㐀Ⰰ 昀Ⰰ㘀 Ⰰ㄀㄀Ⰰ戀挀Ⰰ㘀㜀Ⰰ尀ഀഀ
08,89,51,a4,62,76,29,69,82,e2,70,35,eb,5b,c0,ac,11,04,e1,45,38,43,b1,b1,14,\
਍   ㈀Ⰰ㄀㘀Ⰰ 㐀Ⰰ攀㠀Ⰰ㔀㌀Ⰰ㜀 Ⰰ㈀㜀Ⰰ㌀㌀Ⰰ愀攀Ⰰ㜀㄀Ⰰ挀㄀Ⰰ㄀搀Ⰰ昀㘀Ⰰ㤀戀Ⰰ 搀Ⰰ㜀㄀Ⰰ㌀㠀Ⰰ㄀攀Ⰰ㤀㐀Ⰰ㘀㄀Ⰰ㈀ Ⰰ㤀㔀Ⰰ 㤀Ⰰ搀㈀Ⰰ㘀㄀Ⰰ尀ഀഀ
a0,97,41,45,19,86,35,00,53,91,ed,74,21,20,5c,0d,08,f9,4c,6a,02,40,10,86,f7,\
਍  ㌀ Ⰰ㄀ Ⰰ 戀Ⰰ攀 Ⰰ挀搀Ⰰ愀㌀Ⰰ㌀ Ⰰ㠀㄀Ⰰ㈀㐀Ⰰ㠀㈀Ⰰ愀㌀Ⰰ愀㐀Ⰰ㐀㈀Ⰰ攀 Ⰰ㈀ Ⰰ㄀ Ⰰ㤀攀Ⰰ搀昀Ⰰ戀 Ⰰ㜀 Ⰰ㤀㠀Ⰰ㘀愀Ⰰ搀㠀Ⰰ㐀㄀Ⰰ㐀㠀Ⰰ尀ഀഀ
cc,d4,72,b5,2c,8a,17,50,68,ef,56,89,e1,20,65,1f,9c,28,f4,47,93,d0,01,07,0a,\
਍  㔀㐀Ⰰ㄀㄀Ⰰ㤀挀Ⰰ㐀㘀Ⰰ㔀攀Ⰰ愀㐀Ⰰ㤀㄀Ⰰ攀㔀Ⰰ攀戀Ⰰ搀挀Ⰰ㠀㈀Ⰰ㔀戀Ⰰ㈀㔀Ⰰ㔀㠀Ⰰ㔀㠀Ⰰ㄀ Ⰰ㐀㔀Ⰰ㜀㌀Ⰰ㠀挀Ⰰ㄀戀Ⰰ  Ⰰ㘀㄀Ⰰ㄀愀Ⰰ㔀愀Ⰰ㌀㐀Ⰰ尀ഀഀ
22,20,8c,51,c0,29,3a,86,a0,e0,32,39,3a,ce,e7,cd,8f,97,21,0b,ee,82,c2,c4,e4,\
਍  ㈀㈀Ⰰ㐀㔀Ⰰ㈀搀Ⰰ㄀㌀Ⰰ㈀㌀Ⰰ㌀㄀Ⰰ㈀㠀Ⰰ攀 Ⰰ㠀㤀Ⰰ㄀㘀Ⰰ ㄀Ⰰ愀攀Ⰰ ㌀Ⰰ㈀愀Ⰰ㐀㔀Ⰰ㐀愀Ⰰ㠀㄀Ⰰ㄀㠀Ⰰ戀愀Ⰰ㈀㠀Ⰰ挀㜀Ⰰ愀㄀Ⰰ㔀㄀Ⰰ㠀搀Ⰰ㐀㠀Ⰰ尀ഀഀ
e5,3d,c6,7f,aa,79,d9,02,e4,12,c1,fd,7c,a1,2d,00,f1,6a,d0,91,06,82,90,95,cc,\
਍  攀愀Ⰰ㠀 Ⰰ㄀ Ⰰ㤀㄀Ⰰ㠀㔀Ⰰ㐀愀Ⰰ ㄀Ⰰ ㄀Ⰰ ㄀Ⰰ ㄀ഀഀ

਍
использую для этого такой код:
import os

PATH = 'D:\\regfiles_test\\'
FILE = 'reg'

for i in [filelist for filelist in os.listdir(PATH) if filelist[-3:] == FILE]:

print i
source = open(PATH+i)
receiver = open(PATH+'deleter_'+i, 'w')
for j in source.readlines():
if j[0] == '[':
receiver.write('-'+j)
else:
receiver.write(j)
source.close()
receiver.close()



Офлайн

#8 Май 14, 2010 11:26:56

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

Определить кодировку файла.

Так в чем вопрос? Вы парсите дампы реестра на катакане?
Файл не в уникоде, а в какой-то конкретной кодировке.
Да, вместо filelist == FILE можно использовать строковый метод endswith



Офлайн

#9 Май 14, 2010 11:39:58

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

Определить кодировку файла.

Катакана - следы жизнедеятельности скрипта. А съел он юникодный файл (по крайней мере ворд говорит что там юникод). Если он ест ср1251, например, то несварения не наблюдаю.



Офлайн

#10 Май 14, 2010 11:42:54

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Определить кодировку файла.

UsCr
Вам уже целый тред пытаются объяснить, что нет такой кодировки – “уникод”.

Вы должны понять в какой всё-таки кодировке файл и учитывать её при чтении. Для этого имеет смысл попробовать chardet.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version