新闻  |   论坛  |   博客  |   在线研讨会
解决Linux与Windows文件显示乱码的问题
电子禅石 | 2020-01-04 13:01:56    阅读:2940   发布文章

重点:如果windows 下和虚拟机共享文件,先将文件移到其他位置使用notepad++ 改变编码模式为UTF-8,然后复制到共享目录,然后用编辑器打开中文就不是乱码了。

问题:

  • 在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. ========"
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
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++上修改一下格式里面的编码方式中文注释没有乱码了 

1.jpg————————————————
参考:http://forum.ubuntu.org.cn/viewtopic.php?f=21&t=133898
         https://blog.csdn.net/awkwardgirl/article/details/24018427原文链接:https://blog.csdn.net/edward_zcl/article/details/80180979


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
属于自己的技术积累分享,成为嵌入式系统研发高手。
推荐文章
最近访客