解決Linux與Windows文件顯示亂碼的問題
重點:如果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
# 功能:將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 "********************************"
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
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的最開始的位置比較好。
所以如果不清楚自己的缺省編碼設置,可以手工輸入設置命令:
: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
關于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原文鏈接:https://blog.csdn.net/edward_zcl/article/details/80180979
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。