windows和linux采用了不同的编码,这让很多人伤透了脑经,这里我采用了Python的chardet库获得代码的编码,然后修改编码。

1、首先需要安装chardet库,有很多方式,我才用的是比较笨的方式:sudo pip install chardet

2、废话不多说,直接上代码,同样废话一句,小弟是初手,仅供参考,请大家多多指教。

python版本:

#!/usr/bin/env python
# coding: UTF-8
import sys
import os
import chardet
 
 
def print_usage():
  print '''usage:
  change_charset [file|directory] [charset] [output file]\n
  for example:
    change 1.txt utf-8 n1.txt
    change 1.txt utf-8
    change . utf-8
    change 1.txt
'''
 
 
def get_charset(s):
  return chardet.detect(s)['encoding']
 
 
def remove(file_name):
  os.remove(file_name)
 
 
def change_file_charset(file_name, output_file_name, charset):
  f = open(file_name)
  s = f.read()
  f.close()
 
  if file_name == output_file_name or output_file_name == "":
    remove(file_name)
 
  old_charset = get_charset(s)
  u = s.decode(old_charset)
 
  if output_file_name == "":
    output_file_name = file_name
  f = open(output_file_name, 'w')
  s = u.encode(charset)
  f.write(s)
  f.close()
 
 
def do(file_name, output_file_name, charset):
  if os.path.isdir(file_name):
    for item in os.listdir(file_name):
      try:
        if os.path.isdir(file_name+"/"+item):
          do(file_name+"/"+item, "", charset)
        else:
          change_file_charset(file_name+"/"+item, "", charset)
      except OSError, e:
        print e
  else:
    change_file_charset(file_name, output_file_name, charset)
 
 
if __name__ == '__main__':
  length = len(sys.argv)
 
  if length == 1:
    print_usage()
  elif length == 2:
    do(sys.argv[1], "", "utf-8")
  elif length == 3:
    do(sys.argv[1], "", sys.argv[2])
  elif length == 4:
    do(sys.argv[1], sys.argv[3], sys.argv[2])
  else:
    print_usage()

采用python获得并修改文件编码(原创)的更多相关文章

  1. Ubuntu 查看/修改文件编码

    使用enca工具可以查看和修改文件编码 1.安装 sudo apt-get install enca 2.使用 查看文件编码 enca –L zh_CN file_name 修改文件编码 enca – ...

  2. eclipse修改文件编码

    http://topic.csdn.net/u/20080724/14/428de399-790d-442a-8340-3a5fb6dcfcee.html[修改文件编码,假设JS]   在Eclips ...

  3. python 修改文件编码方式

    import chardet import os def strJudgeCode(str): return chardet.detect(str) def readFile(path): try: ...

  4. 分享一个批量修改文件编码的python脚本

    分享一个自己编写的递归查找子目录,将所有cpp文件编码修改为utf-8编码格式的小脚本 #i!/usr/bin/env python3 # -*- coding:utf-8 -*- import os ...

  5. python大法好——修改文件、函数

    1.修改文件 补充上次没洗完的: 想要修改某个文件里一块地方,可以使用seek函数找到位置write函数修改. 是不是觉得这很简单? 但是如果你这样操作很可能会出现乱码. 因为由于字节数的不同,编码的 ...

  6. IDEA 修改文件编码

    Intellij Idea 修改 properties 文件编码 现象:idea 默认的properties文件是GBK,当有中文时,不同的客户端配置的编码不同时,可能产生中文乱码. 解决:修改pro ...

  7. vim:用vim修改文件编码为utf-8

    命令是 :set fileencoding=utf-8如果用vim打开文件时里面有乱码,可能用上面的命令修改文件后无法保存.可以用其他软件打开文件,然后把内容拷贝到vim里再保存就行了.

  8. vim学习笔记(12):在vim中修改文件编码,解决vim 打开乱码

    在linux 中查看文件编码可以通过以下几种方式: 一.查看文件编码 1.查看文件编码file命令 :file ip.txt ip.txt: UTF-8 Unicode text, with esca ...

  9. vim学习日志(8):linux查看和修改文件编码

    查看文件的编码 方法一: 1.在Vim中可以直接查看文件编码:set fileencoding即可显示文件编码格式.注:如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么你可 ...

随机推荐

  1. Yii2 TimestampBehavior行为

    <?php /** * @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * ...

  2. 11.编写一个Java程序,计算半径为3.0的圆周长和面积并输出结果。把圆周率π定义为常量,半径定义为变量,然后进行计算并输出结果。

    package com.hanqi.yzljs; public class yzljs { public static void main(String[] args) {     final dou ...

  3. 【转】在Windows下搭建React Native Android开发环境

    http://www.jianshu.com/p/2fdc4655ddf8 安装JDK 从Java官网下载JDK并安装.请注意选择x86还是x64版本. 推荐将JDK的bin目录加入系统PATH环境变 ...

  4. 数据库中substring的使用方法 CONVERT(varchar(12) , getdate(), 112 )

    Sqlserver中经常要操作一些时间类型的字段转换,我又不太记得住,所以搜集了以下的一些SqlserverConvertDateTime相关的资料发表在自己的小站里,方便自己以后要用的时候寻找,望对 ...

  5. 【转】coco2d-x 纹理研究

    1.通常情况下用PVR格式的文件来进行图片显示的时候,在运行速度和内存消耗方面都要比PNG格式要快和小.一般情况下PVR消耗的内存比PNG消耗的内存小25%左右.PVR格式可以用ZWoptex导出.P ...

  6. linux shell执行方式

    linux shell执行有两种方式 shell脚本以#!/bin/bash开头,执行shell时先检查首行,在内部以下列方式执行: $/bin/bash script.sh 1. 使用sh执行. $ ...

  7. 手机端轻应用模拟原生的下拉刷新效果(JavaScript)

    方案一:使用iscoll等有下拉功能的框架. 分析:因为项目的结构已经基本完成,再使用框架,会与原来的结构互相影响: 方案二:用JavaScript.Jquery写. 分析:可能没有直接使用框架的效果 ...

  8. String filePath = request.getSession().getServletContext().getRealPath("/");这句话返回的路径是什么,解释下getRealPath("/")函数中的"/"表示什么意思

    request.getSession().getServletContext() 获取的是Servlet容器对象,相当于tomcat容器了.getRealPath("/") 获取实 ...

  9. postgresql行转列并拼接字符串

    有这样一张表: ; id |   kw   ----+--------  1 | big  1 | hello  2 | oracle  2 | small  2 | apple  3 | shit( ...

  10. 百度编辑器1.4.3 .net版在vs2008的使用方法

    由于在官方下载的ueditor包是在vs2012下开发的,可以在vs2010中使用,但在vs2008中就会报错.折腾了一翻,现将解决方法分享给需要的朋友,其实就是把里面包含.net4.0的元素换成.n ...