解决Linux与Windows文件显示乱码的问题
问题:
- 在Windows下用matlab写的代码(.m)文件复制到Linux(Ubuntu)下,注释的中文全是乱码
- 反之,也是一样
原因:
Windows下默认使用的是GB2312编码,Linux默认使用的是UTF-8。 所以在Windows下产生的代码是GB2312编码,在Linux下当然识别为乱码 ; 反之,同理乱码 。
解决方法:
1、直接对文件编码格式的转码,需要不断使用命令
使用linux下的iconv
命令改变文件的编码:
test1.m由GB2312转换成UTF-8(windows下matlab的代码在linux下运行)
iconv -f GB2312 -t UTF-8 test1.m -o test1.m
test2.m由UTF-8转换成GB2312(linux下matlab的代码在windows下运行)
iconv -f UTF-8 -t GB2312 test2.m -o test2.m
如果文件过多,要进行批处理,可用如下编写的shell脚本批量转换编码。(脚本来自linux公社,点击我立刻下载)
使用方法: 将该脚本放在需要进行转换的文件夹中, 执行脚本,可以将当前目录和其子目录下的所有文件转换成指定的编码方法 。
执行如下:
由GB2312转换成UTF-8
./convertMatlab.sh win
由UTF-8转换成GB2312
./convertMatlab.sh linux
提示: 普通用户没有执行权限,需要用chmod +x convertMatlab.sh
增加执行权限
附:Shell脚本(convertMatlab.sh)
#!/bin/bash
# 功能:将GB2312文件 转换成 UTF-8【解决Windows文件复制到Linux之后乱码问题】
#read -p "Input Path:" SPATH
SPATH="."
#echo $SPATH
POSTFIX="m"
param1="$1"
if [ "$param1" == "win" ];then
sys1="Linux"
sys2="Windows"
format1="UTF-8"
format2="GB2312"
elif [ "$param1" == "linux" ];then
sys1="Windows"
sys2="Linux"
format1="GB2312"
format2="UTF-8"
else
echo "************** 功能 ************"
echo " 解决matlab脚本文件在Windows和Linux中移动时出现的乱码问题!"
echo " 将该脚本复制到程序文件夹中,运行该脚本,它会对当前文件夹及子文件夹中的所有*.m文件进行格式转换,解决乱码问题。"
echo " 转换到 Linux 的命令: $0 linux"
echo " 转换到 Window的命令: $0 win"
exit
fi
echo "********************************"
echo " 格式转换中......"
echo " 从"$sys1"("$format1") 转换到 "$sys2"("$format2")"
echo "********************************"
FILELIST(){
filelist=`ls $SPATH `
for filename in $filelist; do
if [ -f $filename ];then
#echo File:$filename
#echo "${filename#*.}"
EXTENSION="${filename#*.}"
#echo $EXTENSION
if [ "$EXTENSION" == "$POSTFIX" ];then
#echo "${filename%%.*}"
echo Processing: $filename
iconv -f $format1 -t $format2 $filename -o $filename
#iconv -f GB2312 -t UTF-8 $filename -o $filename
fi
elif [ -d $filename ];then
cd $filename
SPATH=`pwd`
#echo $SPATH
FILELIST
cd ..
else
echo "$SPATH/$filename is not a common file."
fi
done
}
cd $SPATH
FILELIST
echo "======== Convert Done. ========"
2、设置编辑器的编码方式,一步到位(但也取决于你的编辑器或者IDE)
VIM:
用editplus时,用“另存为…”保存文件时,可以手工选择编码类型:ANSI、Unicode、UTF-8等。在用VIM时如何设置文件的编码类型呢。在vim中,缺省情况下都会按ANSI方式保存,有时我们用vim编写一些jsp文件时,一不小心,就容易犯错误了,因为在我们的开发团队中,是统一使用utf-8编码的,如果用ansi方式保存了,在网页的显示时就会出现乱码问题。
所以如果不清楚自己的缺省编码设置,可以手工输入设置命令:
:set fileencoding=utf-8
然后再保存就行了:
:w
这样无论之前的编码是什么,都会转换成utf-8保存。
如果希望缺省保存方式就是utf-8,就需要在_vimrc中加入以下设置:
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=ucs-bom,utf-8,chinese
把这三行放在_vimrc的最开始的位置比较好。
参考:http://www.wangchao.net.cn/bbsdetail_1631847.html
关于vim中编码的细节问题,推荐另一篇文章,原文地址:http://edyfox.codecarver.org/html/vim_fileencodings_detection.html
Nodepad++:
在nodepad++上修改一下格式里面的编码方式中文注释没有乱码了
参考:http://forum.ubuntu.org.cn/viewtopic.php?f=21&t=133898
https://blog.csdn.net/awkwardgirl/article/details/24018427
更多推荐
所有评论(0)