рд╣рдо рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕ рдкрд░ рд░реВрд╕реА рдЧреНрд░рдВрдереЛрдВ рдХреЛ рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рд▓рд╛рддреЗ рд╣реИрдВ

рдореЗрд░реЗ рдкрд╛рд╕ рдУрдПрд╕ рдПрдХреНрд╕ рдкрд░ рдПрдХ рд▓реИрдкрдЯреЙрдк, рд▓рд┐рдирдХреНрд╕ рдкрд░ рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рджреЛрд╕реНрддреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдФрд░ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпреЗ рддреАрдиреЛрдВ рдХрдВрдкреНрдпреВрдЯрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдкрд╛рда рд╕рд╣рд┐рдд, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдиреЛрдЯреЛрдВ, рдХрд╛рд░реНрдпреЛрдВ рдЖрджрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рдмреБрд░реА рдХрд┐рд╕реНрдордд рд╣реИ: MacOSx рдкрд░ рд▓рд┐рдЦреЗ рдЧрдП рдкрд╛рда рдЦрд░рд╛рдм рд░реВрдк рд╕реЗ Windows рдиреЛрдЯрдкреИрдб рдореЗрдВ рдкрдврд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ MacOSx рдкрд░ Windows рдЯреЗрдХреНрд╕реНрдЯрдбрд┐рдЯред

рдФрд░ рдкреВрд░рд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдкрд░, рдиреЛрдЯрдмреБрдХ рд╡рд┐рдВрдбреЛрдЬ 1251 рдХреЗ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдУрдПрд╕ рдПрдХреНрд╕ рдореИрдХрд╕реАрд░рд┐рд▓рд┐рдХ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рджреЛрдиреЛрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо UTF-8 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдЯрд░реНрдорд┐рдирд▓ рдФрд░ рдкреЛрд╖рд┐рдд рдЖрдЗрдХрдирд╡ рдХрдорд╛рдВрдб рдЦреЛрд▓рдиреЗ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдмрджрд▓рдирд╛ рдмрд╕ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ ...

рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреА, рдЬреЛ рд╕реНрд╡рдпрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдФрд░ рд╕рднреА txt рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ UTF-8 рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рддреА рд╣реИред


рдореИрдВ рд╣рд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:
рдкрд╛рдпрдерди 2.7
рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕ 10.7.5
Pycharm рдЖрдИрдбреАрдИ

рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВрдиреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд┐рдирд╛, рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкрд░рд┐рднрд╛рд╖рд╛ рдЦреБрдж рдмрдирд╛рдИред рд▓реЗрдХрд┐рди ad3w рдХреА рд╕рд▓рд╛рд╣ рдкрд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдбреА-рдореЗрдб рдЪрд╛рд░рдбреЗрдЯ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ, рдкрд┐рдЫрд▓реЗ
рднрдпрд╛рдирдХ рдХреЛрдб
рдкрд░рд┐рднрд╛рд╖рд╛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреА рдПрдХ рд╕рд░рд▓ рдЧрдгрдирд╛ рд╣реИ рдФрд░ рдПрдХ рдХреА рдкрд╕рдВрдж рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд░реНрдг рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдФрд░ рдЖрдк рдПрдХ рдЪрд░рд┐рддреНрд░ рд╕реЗрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдпрд╣ рд╡рд┐рдзрд┐ рдбреЙрд╕ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди txt рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

#!/usr/bin/python # -*- coding: utf-8 -*- __author__ = 'virtustilus' import os import sys #      automatic=False #  appdata={'enc':'','curfile':''} #    toconvert=[] #   r=[] if len(sys.argv)>1: r=sys.argv[1:] automatic=True else: i=raw_input(u'INPUT PATH:') r+=[i] def print1(s): """   ,      """ if not automatic: print s #    utfrustring=u'' utfrustring+=u'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' utfrustring+=u'1234567890-=тАФ+_}{][\\"|;:\'/?><.,`~┬з┬▒!@#$%^&*()тДЦ \r\n ┬л ┬╗ \u0009 \u2013 \u201c \u201d' def checkline(s,encoding=''): """       """ hist='' b=True for i in range(0,len(s)): c=s[i] try: if not c in utfrustring: #:   UTF-8   ,    if encoding==u'UTF-8': hist+= c + u' ' + str(hex(ord(c))) + u' at ' + str(i) + u' in: ' + s + '\n' b=False break except: if encoding==u'UTF-8': hist+=u'error encoding \n' b=False break return (b,hist) def check_all_lines(lines, encoding=''): """      """ foundenc=appdata['enc'] if foundenc: return foundenc if encoding=='': foundenc=u'UNICODE' else: foundenc=encoding x=lines[:] for j in x: if encoding!='': try: j=unicode(j,encoding) except: foundenc='' break cl=checkline(j,encoding) if not cl[0]: if cl[1]!='': print1(u'Error in:'+appdata['curfile']) print1(cl[1]) foundenc='' break appdata['enc']=foundenc #  ,   ,      if len(r)==1 and os.path.isdir(r[0]): a=r[0] r[:]=[] for i in os.walk(a): p=i[2] for j in p: if j.endswith('.txt'): r+=[i[0]+'/'+j] if len(r)>0: for i in r: i=unicode(i,u'UTF-8') # ,      UNICODE   txt   UNICODE: u'.txt' if i.endswith(u'.txt'): f=file(i,'r') lines=f.readlines() f.close() appdata['curfile']=i #    check_all_lines(lines,'') check_all_lines(lines,u'MACCYRILLIC') check_all_lines(lines,u'CP866') check_all_lines(lines,u'CP1251') check_all_lines(lines,u'KOI8R') check_all_lines(lines,u'CP10007') check_all_lines(lines,u'UTF-8-MAC') check_all_lines(lines,u'UTF-8') check_all_lines(lines,u'UTF-8-MAC') check_all_lines(lines,u'UTF-16') check_all_lines(lines,u'UTF-16BE') check_all_lines(lines,u'UTF-7') check_all_lines(lines,u'CP1252') check_all_lines(lines,u'KOI8-U') check_all_lines(lines,u'KOI8-RU') check_all_lines(lines,u'ISO-8859-5') if not appdata['enc']: toconvert.append((i,u'NOT FOUND ENCODING')) if appdata['enc'] and appdata['enc']!=u'UTF-8': toconvert.append((i,appdata['enc'])) else: print1(u'\nFile '+i+u' is not text file. \n\n') if toconvert: c=0 for i in toconvert: if i[1]!=u'NOT FOUND ENCODING': c+=1 if c>0: print1(u'\n\n FOUND FILES TO CONVERT: ') for i in toconvert: print1(i[0] + u' in encoding ' + i[1]) bt=True if not automatic: w=raw_input(u'Convert '+str(c)+u' files? (N)') bt= (w=='Y' or w=='y' or w=='' or w=='' or w=='' or w=='') if bt: for i in toconvert: if i[1]!=u'NOT FOUND ENCODING': f=file(i[0],'r') x=f.readlines() f.close() x=[ unicode(k,i[1]) for k in x ] x=[ k.encode(u'UTF-8') for k in x] f=file(i[0],'w') f.writelines(x) f.close() print1(u'FILE '+i[0]+u' CONVERTED SUCCESSFULLY :) ') else: print1(u'Bye!') else: print1(u'NO FILES TO CONVERT') for i in toconvert: print1(i[0] + u' in encoding ' + i[1]) else: print1(u' ALL ENCODING IS OK (UTF-8)!!! :)') else: print1(u'NO ONE TXT FILE') 



Chardet 1.1 рдореЙрдбреНрдпреВрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ,
рдЕрдирдкреИрдХ рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ:
 python setup.py install 


рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдБ:
рдкрд┐рдЫрд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг
 #!/usr/bin/python # -*- coding: utf-8 -*- __author__ = 'virtustilus' import os import sys import chardet files=sys.argv[1:] #   ,   if len(files)==0: files=[raw_input(u'INPUT PATH:')] #       files_to_convert=[] for i in files: if os.path.exists(i): if os.path.isdir(i): for w in os.walk(i): for wfile in w[2]: if wfile.lower().endswith('.txt'): files_to_convert+=[w[0]+'/'+wfile] elif os.path.isfile(i): #    ,     files_to_convert+=[i] if len(files_to_convert)>0: for i in files_to_convert: f=file(i,'r') text=''.join(f.readlines()) f.close() enc=chardet.detect(text).get('encoding') #      (dropbox),    if enc!='UTF-8': #          try: text=text.decode(enc).encode('UTF-8') f=file(i,'w') f.write(text) f.close() except: pass 



 #!/usr/bin/python # -*- coding: utf-8 -*- __author__ = 'virtustilus' import os import sys import chardet def may_be_1251(text_not_changed, encoding): """    Win1251,  chardet ,   MacCyrillic        chardet ,   MacCyrillic: 1. тАЭ  Advanced- 2. тАЭтВм,    ( ..     ) 3. тАФ  mfc100u.dll      тВм   """ simbols = u'' simbols += u'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' simbols += u'1234567890-=тАФ+_}{][\\"|;:\'/?><.,`~┬з┬▒!@#$%^&*()тДЦ \r\n' if encoding.lower() == 'maccyrillic': err_mac = err_win = 0 try: t_win = text_not_changed.decode('cp1251') except: err_win += 1000000 try: t_mac = text_not_changed.decode('MacCyrillic') except: err_mac += 1000000 for i in t_win: if i not in simbols and i != u'\n': err_win += 1 for i in t_mac: if i not in simbols: err_mac += 1 if err_mac > err_win: encoding = 'cp1251' return encoding paths = sys.argv[1:] #   ,   if len(paths) == 0: paths = [raw_input(u'INPUT PATH:')] #    ( , ..     " ") dirs = [i for i in paths if os.path.exists(i) and os.path.isdir(i)] files = [i for i in paths if os.path.exists(i) and os.path.isfile(i)] #    for i_dir in dirs: for wpath, wdirs, wfiles in os.walk(i_dir): files += [wpath + '/' + i for i in wfiles if i.lower().endswith('.txt')] for i in files: with open(i, 'r') as f: text = ''.join(f.readlines()) enc = may_be_1251(text, chardet.detect(text).get('encoding')) #      (dropbox),    if enc and enc.lower() != 'utf-8': #          try: text = text.decode(enc) #   OS X 10.8     \r text = text.replace(u'\r', '').encode('utf-8') # :    ,       .    ,    os.unlink(i) with open(i, 'w') as f: f.write(text) except: pass 


рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдУрдПрд╕ рдПрдХреНрд╕ рдореЗрдВ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рд╕реАрдзреЗ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдСрдЯреЛрдореЗрдЯрд░ рдЦреЛрд▓реЗрдВ рдФрд░ рд╕реЗрд╡рд╛ рдмрдирд╛рдПрдБред
рд╢реАрд░реНрд╖ рдкрд░, "рдлрд╛рдЗрдВрдбрд░.рдРрдк рдореЗрдВ рд╕реЗрд╡рд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП" рдЖрдЗрдЯрдо рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред

рдЕрдЧрд▓рд╛, рдХрд╛рд░реНрд░рд╡рд╛рдИ "рдЪрдпрдирд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╛рдЗрдВрдбрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ" рд╕реЗрдЯ рдХрд░реЗрдВред
рдЗрд╕рдХреЗ рдмрд╛рдж, "рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рд╢реИрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ" "рдЗрдирдкреБрдЯ рдкрд╛рд╕ рдХрд░реЗрдВ: рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ" рдФрд░ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА:

 for f in "$@" do python /___/convert_encoding.py "$f" 2>/dev/null done 


рдореИрдВрдиреЗ 2> / dev / null рдЬреЛрдбрд╝рд╛ рддрд╛рдХрд┐ рдПрдХ chardet рдореЙрдбреНрдпреВрд▓ рддреНрд░реБрдЯрд┐ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрдиреЗ рдкрд░ рдСрдЯреЛрдореЗрдХрд░ рдирд┐рд╖реНрдкрд╛рджрди рдмрдВрдж рди рдХрд░реЗред

рдФрд░ рдЕрдВрддрд┐рдо рдЖрдЗрдЯрдо "рд╢реЛ рдЧреНрд░реЛрде рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди" рд╣реИ (рдЖрдк рдЗрд╕рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд░реВрдкрд╛рдВрддрд░рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред


рд╣рдо рдЗрд╕реЗ рд▓реИрдЯрд┐рди рдЕрдХреНрд╖рд░реЛрдВ рдореЗрдВ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ (рд░реВрд╕реА рдХреЗ рд╕рд╛рде, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдореЗрдиреВ рдЖрдЗрдЯрдо рддрдм рддрдХ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ рдЬрдм рддрдХ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рдмрджрд▓рд╛) рдФрд░ рдЬрд╛рдВрдЪреЗрдВред

рд╕реЗрд╡рд╛ рд╕рдмрдореЗрдиреВ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдФрд░ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдиреВ рдореЗрдВ рдлрд╛рдЗрдВрдбрд░ рдореЗрдВ рдПрдХ рдирдпрд╛ рдореЗрдиреВ рдЖрдЗрдЯрдо рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред

PS рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ 5 рд╡рд╛рдВ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рдж рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рджред
PS рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА: рдпрджрд┐ рдЕрдЬрдЧрд░ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рджреЗрдЦрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╣ рд▓рд┐рдЦрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЙрд╕рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рд╣реЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/In152737/


All Articles