Найти - Пользователи
Полная версия: Определить кодировку файла.
Начало » Python для новичков » Определить кодировку файла.
1 2
UsCr
Эту штуку пробовали? http://forum.script-coding.info/viewtopic.php?id=2536
Есть достойные альтернативы “в комплекте”?

Задача стоит сабжевая. Возникли проблемы при перезаписывании изменённого текста из файла в юникоде. В папочке, где хозяйничает скрипт, лежат файлы в разных кодировках. Соответственно, и подход им нужен разный, так ведь?
truporez
Делаем unicode( content, “utf8” ). Словили UnicodeDecodeError? Делаем unicode( content, “cp1251” ). Опять UnicodeDecodeError? Изобретаем что-нибудь еще.
Но лучше chardet.
UsCr
Перед тем, как задать вопрос я морально приготовился растирать по лицу вашу слюну.
Разве unicode( content, “cp1251” ) не делает юникод из кодировки ср1251? Тогда зачем мне из юникода делать юникод? Вернее нет, не так. Почему это работат?
truporez
ибо utf8 и unicode не одно и тоже.
UsCr
UsCr
Разве unicode( content, “cp1251” ) не делает юникод из кодировки ср1251
truporez
делает если это возможно и не указаны параметры типа ignore, replace
UsCr
Ну так если файл в юникоде, то я и читаю из него юникод, да? Проблемы возникают именно при чтении юникода. Получаю такой вот файл:
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()
truporez
Так в чем вопрос? Вы парсите дампы реестра на катакане?
Файл не в уникоде, а в какой-то конкретной кодировке.
Да, вместо filelist == FILE можно использовать строковый метод endswith
UsCr
Катакана - следы жизнедеятельности скрипта. А съел он юникодный файл (по крайней мере ворд говорит что там юникод). Если он ест ср1251, например, то несварения не наблюдаю.
Александр Кошелев
UsCr
Вам уже целый тред пытаются объяснить, что нет такой кодировки – “уникод”.

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