环境
- Ubuntu 14.04
- Matlab 2014b
问题
- 将matlab代码从Windows中复制到Linux中(或从Linux复制到Windows)时,matlab代码中的中文注释部分变成了乱码。
原因
- Windows和Linux中的默认编码不同,Windows中默认为GB2312,Linux中默认为UTF-8。
- Matlab会自动使用操作系统的默认编码。
- 由于编码方式不同,所以出现了乱码现象。
解决方法
单文件处理
- 使用Linux命令
iconv
转换编码方式。
- 例如,将test1.m从Windows复制到Linux中,使用以下命令可以转换编码方式,解决乱码问题。
# 将test1.m转换成UTF-8
iconv -f GB2312 -t UTF-8 test1.m -o test1.m
- 假设将test2.m从Linux复制到Windows中,使用以下命令可以转换编码方式,解决乱码问题。
# 将test2.m转换成GB2312
iconv -f UTF-8 -t GB2312 test2.m -o test2.m
批量处理
- 如果是少量的文件,可以使用
iconv
逐个转换,但是如果文件数量很多,就很麻烦。
- 为了提高效率,可以使用使用shell脚本批量转换编码。
- 脚本内容如下所示:
#!/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. ========"
- 使用方法:
- 将该脚本放到需要进行转换的matlab代码所在的文件夹中,执行该脚本,可以将当前目录及其子目录中的*.m文件转换成指定编码格式。
- 给脚本添加可执行权限。
chmod +x convertMatlab.sh
- 从Linxu复制到Windows中,执行命令
./convertMatlab.sh win
。
- 从Windows复制到Linux中,执行命令
./convertMatlab.sh linux
。
- 将matlab代码从Windows中复制到Linux中(或从Linux复制到Windows)时,matlab代码中的中文注释部分变成了乱码。
原因
- Windows和Linux中的默认编码不同,Windows中默认为GB2312,Linux中默认为UTF-8。
- Matlab会自动使用操作系统的默认编码。
- 由于编码方式不同,所以出现了乱码现象。
解决方法
单文件处理
- 使用Linux命令
iconv
转换编码方式。
- 例如,将test1.m从Windows复制到Linux中,使用以下命令可以转换编码方式,解决乱码问题。
# 将test1.m转换成UTF-8
iconv -f GB2312 -t UTF-8 test1.m -o test1.m
- 假设将test2.m从Linux复制到Windows中,使用以下命令可以转换编码方式,解决乱码问题。
# 将test2.m转换成GB2312
iconv -f UTF-8 -t GB2312 test2.m -o test2.m
批量处理
- 如果是少量的文件,可以使用
iconv
逐个转换,但是如果文件数量很多,就很麻烦。
- 为了提高效率,可以使用使用shell脚本批量转换编码。
- 脚本内容如下所示:
#!/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. ========"
- 使用方法:
- 将该脚本放到需要进行转换的matlab代码所在的文件夹中,执行该脚本,可以将当前目录及其子目录中的*.m文件转换成指定编码格式。
- 给脚本添加可执行权限。
chmod +x convertMatlab.sh
- 从Linxu复制到Windows中,执行命令
./convertMatlab.sh win
。
- 从Windows复制到Linux中,执行命令
./convertMatlab.sh linux
。
单文件处理
- 使用Linux命令
iconv
转换编码方式。
- 例如,将test1.m从Windows复制到Linux中,使用以下命令可以转换编码方式,解决乱码问题。
# 将test1.m转换成UTF-8
iconv -f GB2312 -t UTF-8 test1.m -o test1.m
- 假设将test2.m从Linux复制到Windows中,使用以下命令可以转换编码方式,解决乱码问题。
# 将test2.m转换成GB2312
iconv -f UTF-8 -t GB2312 test2.m -o test2.m
批量处理
- 如果是少量的文件,可以使用
iconv
逐个转换,但是如果文件数量很多,就很麻烦。
- 为了提高效率,可以使用使用shell脚本批量转换编码。
- 脚本内容如下所示:
#!/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. ========"
- 使用方法:
- 将该脚本放到需要进行转换的matlab代码所在的文件夹中,执行该脚本,可以将当前目录及其子目录中的*.m文件转换成指定编码格式。
- 给脚本添加可执行权限。
chmod +x convertMatlab.sh
- 从Linxu复制到Windows中,执行命令
./convertMatlab.sh win
。
- 从Windows复制到Linux中,执行命令
./convertMatlab.sh linux
。
iconv
转换编码方式。# 将test1.m转换成UTF-8
iconv -f GB2312 -t UTF-8 test1.m -o test1.m
# 将test2.m转换成GB2312
iconv -f UTF-8 -t GB2312 test2.m -o test2.m
- 如果是少量的文件,可以使用
iconv
逐个转换,但是如果文件数量很多,就很麻烦。 - 为了提高效率,可以使用使用shell脚本批量转换编码。
- 脚本内容如下所示:
#!/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. ========"
- 使用方法:
- 将该脚本放到需要进行转换的matlab代码所在的文件夹中,执行该脚本,可以将当前目录及其子目录中的*.m文件转换成指定编码格式。
- 给脚本添加可执行权限。
chmod +x convertMatlab.sh
- 从Linxu复制到Windows中,执行命令
./convertMatlab.sh win
。 - 从Windows复制到Linux中,执行命令
./convertMatlab.sh linux
。
脚本到Linux公社资源站下载:
——————————————分割线——————————————
免费下载地址在 http://linux.linuxidc.com/
用户名与密码都是www.linuxidc.com
具体下载目录在 /2016年资料/11月/24日/Matlab代码从Windows拷贝到Linux变成乱码/
下载方法见 http://www.linuxidc.com/Linux/2013-07/87684.htm
——————————————分割线——————————————
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-11/137495.htm