文件的编码问题解决

摘要:
前言:在很多情况下,我们需要在Linux、Mac和Windows之间共享一些文件。然而,由于每个平台支持的代码不一致,有些是GB2312,有些是utf-8。因此,跨平台文件无法正确打开。例如,Windows中的GB2312编码文件放在mac上。如果mac没有安装GB2312解码器,打开文件将导致乱码。这里总结了文件格式的相互转换。当然,目标是全球统一的utf系列代码,如utf-8和utf-16。

前言

很多时候,我们需要在linux(ubuntu,centos等)、mac和windows之间共享一些文件,但是因为各个平台自带支持的编码不一致,有的是GB2312(window默认),有的是utf-8。导致跨平台无法正确打开文件,比如windows下的GB2312编码文件放到mac下,如果mac没有安装GB2312解码器,那打开就乱码。这里总结了文件格式的相互转换,目标当然是全球统一的utf-8,utf-16等utf系列编码。

查看文件编码工具安装

windows 文件编码格式查看和转换

windows平台可以通过notepad ++ 查看文件的编码,同时也可以保存为指定编码的问题文件,比如下图,查看是ANSI格式编码。
在这里插入图片描述
转换时,只需要选择对应的编码格式,下方可以转为utf-8或其他编码,如下图:
在这里插入图片描述

linux(ubuntu/centos)&mac等文件编码格式安装

apt-get install enca   # ubuntu
brew install enca      # mac
yum install enca      # centos

查看文件编码

# 查看指定文件的编码格式
enca -L zh_CN filename    # 或者
enca filename

# 查看当前目录下所有文件的编码
enca `ls`   # 引号为tab键上方的字符

如下图查看当前文件的字符编码,有GB2312,有7个二进制编码的文件(一行对应一个文件)。
在这里插入图片描述
文件中出现了部分文件是 7bit ASCII characters的文件,这是因为整个文件中没有中文字符,所以就这样显示,如果你写两个中文字符到文件中,你会神奇的发现编码格式显示为utf-8。

转换编码

# 转换指定文件到utf-8
enca -L zh_CN -x UTF-8 filename   //或
enca -x UTF-8 filename

# 转换当前目录下所有文件到utf-8
enca -L zh_CN -x utf-8 *   # 或
enca -x utf-8 *

转换格式后查看结果如下:
在这里插入图片描述

多层目录文件格式转换

从mayue_web的博客中看到了一个shell脚本转换文件格式的,这里也一并贴出来,供大家参考。

cli="find . -type f ( "
for arg in ${@:1:$#-1}
do
	cli="$cli -iname *.$arg -o "
done
cli="$cli -iname *.${@: -1} )"
#echo $cli
PRE_IFS=$IFS
IFS=$'
'
for i in `eval $cli`
do
	enca -x utf-8 $i
done
IFS=$PRE_IFS
echo "ok!"

其实作为一个开发人员,完成可以写个如python的脚本,来遍历多层子文件,python脚本如下:

import os
import sys
def recursive_visitor(file_dir):
    for filename in os.listdir(file_dir):

        # filter some file
        if filename.startswith('.'):
            continue

        # only convert py file to utf-8
        file_path = os.path.join(file_dir, filename)
        if os.path.isfile(file_path) and filename.endswith('.py'):
            cmd_str = "enca -x UTF-8 %s" % file_path
            ret = os.system(cmd_str)
            if ret:
                print("-- convert file to utf-8 failed, please check the file: {} ----".format(file_path))
                sys.exit(1)

        if os.path.isdir(file_path):
            recursive_visitor(file_path)

参考文献

https://blog.csdn.net/mayue_web/article/details/89382470
https://blog.csdn.net/mayue_web/article/details/89384982

 

免责声明:文章转载自《文件的编码问题解决》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇关于移动端使用swiper做图片文字轮播的思考查询功能,测试点总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle 字符集的查看和修改

一、什么是Oracle字符集        Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。 影响Oracle数据库字符集最重要的参数是NLS_LANG参...

npm install -g create-react-app MacOS 报错解决

macOS 安装create-react-app报错解决: sudo npm uninstall -g create-react-app //删除之前对镜像 npm config set registry https://registry.npm.taobao.org // 安装还是不成功直接切换成淘宝镜像安装 npm config get regist...

MAC下MAMP安装php扩展教程记录

1.官网下载所对应的php 版本http://php.net/get/php-5.3.29.tar.gz/from/a/mirror 2.解压 找到需要的扩展目录 例如我要的是shmop cd ~/Downloads/php-5.3.29/ext/shmop 3.执行你所用php版本的phpize 而不是默认的 /Applications/MAMP/bin...

MAC OSX 驱动操作

mac ox系统的驱动安装常规操作:下载到 *.kext 的驱动以后,都可以直接把它拖到 /System/Library/Extensions/ 下替换掉原来的文件。替换了以后,还需要修复权限才能够正常使用。因为 Mac OS X 是基于 FreeBSD 的操作系统,因此 Unix 下对文件权限的依赖就被继承了下来了。大家在替换了 *,kext 文件以后,...

Linux下修改MySQL数据库字符编码为UTF-8解决中文乱码

由于MySQL编码原因会导致数据库出现乱码。 解决办法: 修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家需要用到的字符,是国际编码。 具体操作: 1、进入MySQL控制台 >mysql -uroot -p #输入密码进入 >status; #查看当前MySQL运行状态,如下图所示:  ...

Mac下PHP开发环境的搭建(转载)

一、首先Mac OS自带Apache,只需要启动Apache就行。 打开终端,输入命令:sudo apachectl start : 介绍几个Apache的常用命令 //启动Apache服务 sudoapachectl start //重启Apache服务 sudoapachectl restart //停止Apache服务 sudoapach...