前言
很多时候,我们需要在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=$'\n'
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2015-11-09 linux gcc 编译时头文件和库文件搜索路径