欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

restore_utf8、utf8togbk

程序员文章站 2024-02-17 09:04:34
...
restore_utf8.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Run "python restore_utf8.py" to rename *.h.utf8 to *.h.
#

import os

def restore_utf8(dir):
    resultfn = ''
    for fn in os.listdir(dir):
        sfile = os.path.join(dir, fn)
        if os.path.isdir(sfile):
            resultfn += restore_utf8(sfile)
            continue
        if fn.endswith('.utf8'):
            orgfile = sfile[:-5]
            try:
                if os.path.exists(orgfile): os.remove(orgfile)
                os.rename(sfile, orgfile)
                resultfn += fn[:-5] + ' '
            except:
                print('except for %s' %(fn,))
    return resultfn

if __name__=="__main__":
    resultfn = restore_utf8(os.path.abspath('.'))
    resultfn += restore_utf8(os.path.abspath('../core'))
    resultfn += restore_utf8(os.path.abspath('../android'))
    if resultfn != '': print('restore files: ' + resultfn)



#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Run "python utf8togbk.py" to convert source code files to the GBK format on Windows.
#

import os, codecs, sys

reload(sys)
sys.setdefaultencoding('gbk')

def utf8togbk(dir):
    resultfn = ''
    for fn in os.listdir(dir):
        sfile = os.path.join(dir, fn)
        if os.path.isdir(sfile):
            resultfn += utf8togbk(sfile)
            continue
        if fn.endswith('.h') or fn.endswith('.cpp'):
            if os.path.exists(sfile + '.utf8'):
                continue
            try:
                text = open(sfile,'r',-1,'utf-8').read()
                oldtext = text
            except UnicodeDecodeError:
                continue
            except TypeError:
                text = open(sfile).read()
                oldtext = text
                try:
                    if text[:3] == codecs.BOM_UTF8:
                        u = text[3:].decode('utf-8')
                        text = u.encode('gbk')
                except UnicodeEncodeError:
                    continue
                except UnicodeDecodeError:
                    continue
            try:
                text = text.replace('\r\n','\n')
                text = text.replace('\n','\r\n')
                if cmp(text, oldtext) != 0:
                    os.rename(sfile, sfile + '.utf8')
                    open(sfile, 'wb').write(text)
                    resultfn += fn + ' '
                    st = os.stat(sfile + '.utf8')
                    os.utime(sfile, (st.st_atime, st.st_mtime))
            except:
                print('except for %s' %(fn,))
    return resultfn

if __name__=="__main__":
    resultfn = utf8togbk(os.path.abspath('.'))
    resultfn += utf8togbk(os.path.abspath('../core'))
    resultfn += utf8togbk(os.path.abspath('../android'))
    if resultfn != '': print('utf8->gbk: ' + resultfn)