#10月10日更新#
今天在windows下用visual studio打開多個fortran文件,均出現了之前提到的“Some bytes have been replaced with...”錯誤,這就比較尷尬了。最終發現,是因為將windows系統的默認編碼設置成了UTF-8的原因。最后改回原來的默認設置,把那個“支持UTF-8編碼(beta)”選項關閉之后,就沒有出現亂碼了。
#10月9日更新#
今天在Linux 上用vim 打開一個文件,vim將其識別成gb18030編碼,能正常顯示中文,然后進行了修改,保存。之后在windows上用visual studio 打開,提示了之前提到的“Some bytes have been replaced with...”錯誤,中文無法解決。
解鈴還須系鈴人,最后是在vim中打開這個文件,set fileencoding=utf-8,將文件的編碼格式設置成UTF-8,然后保存。之后再在windows上用visual studio打開,就正常了!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
工作原因,需要在windows和linux上同時對代碼進行編輯。有時候會出現一個詭異的現象,在linux的vim顯示正常的文件,在windows系統中用visual studio打開時提示
File Load Some bytes have been replaced with the Unicode substitution character while loading file xxx.f90 with Chinese Simplified (GB2312) encoding. Saving the file will not preserve the original file contents.
打開的文件出現的是一堆亂碼。 這究竟是怎么造成的?
從字面上看,是這個文件原本是用GB2312進行編碼的,但是文件中的一部分是用Unicode編碼的。
問題就在於windows和Linux 下的vim之間的默認的文本編碼的差異。
在Windows里,默認保存的文件,中文的編碼格式是GBK編碼(cp936)
而在Linux系統中,當用vim打開windows保存的文本文件時,會先嘗試用默認的編碼格式(UTF-8)去轉換,如果出現轉換錯誤,再嘗試用vim配置文件中列出的其它編碼格式讀取。
這個vim配置文件是vimrc,一般位於/usr/share/vim/vimrc。在這個配置文件中,通過設置fileencodings 的值,來告訴vim編輯器依次嘗試用這些編碼格式打開文件。
設想出現如下的情況,
比如在windows下創建一個文本文件,以windows默認的格式(cp936)保存。但是,在linux系統中用vi打開這個文件時,由於某種原因,將其錯誤地識別成了UTF-8編碼。這時候再對文件進行改動,改動部分就會以UTF-8的編碼格式寫入。之后再在windows下打開這個文件,就會出現亂碼的錯誤。
另外,如果用vim打開文件時提示:"xxxx.txt" [第 xx 行無效字符][dos] xxxxL, xxxxC ,則意味着出現了轉換錯誤。
造成轉換錯誤意味着文件的文本編碼不正確。這里的“文本編碼不正確”並不一定意味着所有的編碼不正確,因為可能出現一個文件用兩種編碼保存的情況(可能在文件的這一行用的UTF-8對文本進行編碼,在這個文件的下一行用GBK編碼文本)。可能用vim打開文件時候,一部分文本能正常顯示——這部分文本的編碼和vim當前的編碼一致,但另一部分文本不能正常顯示,這時候嘗試切換使用不同格式的編碼打開文件,有可能使得這部分文本正常顯示(原來能正常顯示的文本可能因為切換了編碼不能正常顯示)。
比如以gbk編碼打開文件
vi coding_test.f90 -c "e ++enc=gbk"
在vi中查看文件的編碼
set fileencoding
關於中文編碼
常見的中文編碼有GB2312, GBK, GB13030等。這些帶GB*前綴的,是中國定的。其中GB2312歷史最早,1980年,支持的漢字字符也最少;GBK 1.0版本是1995年推出的;到了2000年GB18030推出,這一版本除了漢字外,還加入藏、蒙、維等字體
而國際上采用的是UTF編碼也支持中文,但是windows下還是默認用的GBK編碼。
參考
常見字符編碼掃盲(UTF,Unicode, GB2312) - 四-兒 - 博客園 https://www.cnblogs.com/sier/archive/2011/10/02/5676457.html
在Vim中查看文件編碼 - 浮沉一夢 - 博客園 https://www.cnblogs.com/jjzd/p/7380487.html
Vim 編輯器底端 [noeol], [dos] 的含義_王佳偉的博客-CSDN博客 https://blog.csdn.net/strongwangjiawei/article/details/8236703