文件亂碼怎么辦? windows電腦文件亂碼恢復(fù)正常的技巧

文件打開是亂碼怎么解決?在我們使用電腦中,都遇到過打開文件后,發(fā)現(xiàn)全是亂碼。遇到這種情況,該怎么解決呢?這里小編整理了一些實(shí)用的文件修復(fù)方法,有需要的朋友可以來看看哦。
個(gè)人建議
修改時(shí)盡量修改自定義選項(xiàng)例如.bash_profile
,.vimrc
文檔,這樣不會(huì)忘記自己修改了哪里,有時(shí)候某處的修改導(dǎo)致后面出現(xiàn)了新的問題,但卻無法定位。
漢字亂碼現(xiàn)象有4種類型:
1.文本亂碼:是windows系統(tǒng)顯示亂碼,如:菜單、桌面、提示框等。這是由于注冊(cè)表中有關(guān)字體部分的設(shè)置不當(dāng)引起的;
2. 文檔亂碼:是各種應(yīng)用程序,游戲本來顯示中文的地方出現(xiàn)亂碼。 這種亂碼形成的原因比較復(fù)雜,有第1類的亂碼原因,也有可能是軟件中使用的中文動(dòng)態(tài)鏈接庫被英文動(dòng)態(tài)鏈接庫復(fù)蓋處造成的;
3.文件亂碼:主要是指郵件亂碼;
4.網(wǎng)頁亂碼:是由于港臺(tái)的繁體中文大五碼(big5)與大陸簡(jiǎn)體中文(gb2312)不通用而造成的。
文件內(nèi)容亂碼
以.txt文檔為例,直接打開是亂碼,可通過下面方法查看情況,在vim軟件中輸入
#查看當(dāng)前文件編碼 :set fileencoding fileencoding=gb18030
在.vimrc
文檔下加入
set fileencodings=utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1 set enc=utf8 set fencs=utf8,gbk,gb2312,gb18030
此時(shí)文檔會(huì)正確顯示。
解壓文件夾文件名亂碼
對(duì)于windows平臺(tái),編碼格式是GBK,對(duì)應(yīng)的漢字是兩個(gè)字節(jié)長(zhǎng)度。對(duì)于Linux平臺(tái),編碼格式是UTF-8,對(duì)應(yīng)的漢字是3個(gè)字節(jié)。
解壓文件夾的命令
unzip -O CP936 testCode.zip
對(duì)應(yīng)的解釋
unzip --h -O CHARSET specify a character encoding for DOS, Windows and OS/2 archives
命令行亂碼怎么辦?
執(zhí)行以下命令
vim ~/.bash_profile #添加下面的命令 export LANGUAGE=en_US.UTF-8 export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8 #使得生效,有的讓重啟是一個(gè)意思 source ~/.bash_profile
使用命令查看當(dāng)前編碼
locale
:local encode,即本地編碼的意思。這個(gè)命令不帶任何參數(shù)就是顯示當(dāng)前系統(tǒng)的字符集編碼。也可以設(shè)置環(huán)境變量,全體參數(shù)man locale
在Linux中通過locale來設(shè)置程序運(yùn)行的不同語言環(huán)境,locale由ANSI C提供支持。locale的命名規(guī)則為<語言>_<地區(qū)>.<字符集編碼>,如zh_CN.UTF-8,zh代表中 文,CN代表大陸地區(qū),UTF-8表示字符集。
locale #LANG LC_*的默認(rèn)值,是最低級(jí)別的設(shè)置,如果LC_*沒有設(shè)置,則使用該值。類似于 LC_ALL。 LANG=en_US.UTF-8 LANGUAGE=en_US.UTF-8 #LC_CTYPE用于字符分類和字符串處理,控制所有字符的處理方式,包括字符編碼,字符是單字節(jié)還是多字節(jié),如何打印等。是最重要的一個(gè)環(huán)境變量。 LC_CTYPE="en_US.UTF-8" # LC_NUMERIC 非貨幣的數(shù)字顯示格式 LC_NUMERIC="en_US.UTF-8" #LC_TIME 時(shí)間和日期格式 LC_TIME="en_US.UTF-8" # LC_COLLATE定義該環(huán)境的排序和比較規(guī)則 LC_COLLATE="en_US.UTF-8" #LC_MONETARY貨幣格式 LC_MONETARY="en_US.UTF-8" #LC_MESSAGES提示信息的語言。另外還有一個(gè)LANGUAGE參數(shù),它與LC_MESSAGES相似,但如果該參數(shù)一旦設(shè)置,則LC_MESSAGES參數(shù)就會(huì)失效。LANGUAGE參數(shù)可同時(shí)設(shè)置多種語言信息,如LANGUANE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"。 LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" #LC_ALL它是一個(gè)宏,如果該值設(shè)置了,則該值會(huì)覆蓋所有LC_*的設(shè)置值。注意,LANG的值不受該宏影響。 LC_ALL=en_US.UTF-8
locale -a你可以看看目前系統(tǒng)里支持的字符集,如果不支持,還要安裝奧。當(dāng)前.bash_profile
的設(shè)置是
#中文顯示 if [ 1 -eq 1 ];then LANG=zh_CN.GB18030 LANGUAGE=zh_CN.GB18030:zh_CN.GB2312:zh_CN export LANG LANGUAGE fi #英文顯示 if [ 0 -eq 1 ];then export LANGUAGE=en_US.UTF-8 export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8 fi
字符編碼基礎(chǔ)知識(shí)
最初的計(jì)算機(jī)字符編碼是通過ASCII來編碼的,是現(xiàn)今最通用的單字節(jié)編碼系統(tǒng),使用7位二進(jìn)制數(shù)來表示所有的字母、數(shù)字、標(biāo)點(diǎn)符號(hào)及一些特殊控制字符,作為美國(guó)編碼標(biāo)準(zhǔn)來使用。
ISO-8859-1編碼是單字節(jié)編碼,向下兼容ASCII,是許多歐洲國(guó)家使用的編碼標(biāo)準(zhǔn)。其編碼范圍是0x00-0xFF,0x00-0x7F之間完全和ASCII一致,0x80-0x9F之間是控制字符,0xA0-0xFF之間是文字符號(hào)。
Unicode,學(xué)名是Universal Multiple-Octet Coded Character Set(簡(jiǎn)稱UCF),與ISO-8859-1標(biāo)準(zhǔn)兼容。由國(guó)際組織標(biāo)準(zhǔn)制定,作為一種國(guó)際語言編碼標(biāo)準(zhǔn),支持超過十萬個(gè)字符,涵蓋世界數(shù)十種文字系統(tǒng),是一種通用字符編碼標(biāo)準(zhǔn)。很多技術(shù),如Java編程語言、現(xiàn)代操作系統(tǒng)都采用了Unicode編碼。
UTF-8/UTF-16等則是對(duì)Unicode進(jìn)行了編碼,是其一種實(shí)現(xiàn)方式。UTF-8(8-bit Unicode Transformation Format),是一種變長(zhǎng)的編碼方式,它以8位為碼元,用1-6個(gè)碼元對(duì)Unicode進(jìn)行編碼,對(duì)英文字符使用單字節(jié)編碼,對(duì)中文編碼用到三個(gè)字節(jié)來編碼。UTF-16(16-bit Unicode Transformation Format)是用16位為碼元,用1個(gè)或2個(gè)碼元對(duì)Unicode進(jìn)行編碼。
utf-16將字符集劃分為基本多文中平面和輔助平面,基本多文中平面中的字符與Unicode是一致的,不需要轉(zhuǎn)換;處在輔助平面中的碼元(如一些拼音文字或者中日韓表意文字的擴(kuò)充),需要2個(gè)碼元進(jìn)行編碼。
GB2312是國(guó)家制定的漢字編碼標(biāo)準(zhǔn),使用雙子節(jié)進(jìn)行編碼,共收入6763個(gè)漢字和682個(gè)非漢字圖形字符。GBK即對(duì)國(guó)標(biāo)編碼的擴(kuò)展,在GB2312的基礎(chǔ)上進(jìn)行擴(kuò)展形成的,使用雙子節(jié)編碼方式,共收入21003個(gè)漢字,從而大大滿足了漢字使用的需要。
總結(jié):unicode是國(guó)際通用編碼標(biāo)準(zhǔn),可以表示全世界的字符,但其字符集也是最復(fù)雜、占用空間最大的。開發(fā)者可以根據(jù)需要進(jìn)行選擇編碼方式。
參考文獻(xiàn)
原文:https://blog.csdn.net/shijing_0214/article/details/50908144 關(guān)于文件編碼的一些命令
查看文件的編碼:編碼為GB2512
#檢查文件的編碼 enca test1.txt enca -L zh_CN fileName Simplified Chinese National Standard; GB2312 CRLF line terminators
轉(zhuǎn)換文件編碼
enca -L 當(dāng)前語言 -x 目標(biāo)編碼 文件名 enca -L zh_CN -x utf-8 * //例如要把當(dāng)前目錄下的所有文件都轉(zhuǎn)成utf-8 enca -L zh_CN -x UTF-8 file //將文件編碼轉(zhuǎn)換為"UTF-8"編碼 enca -L zh_CN -x UTF-8 < file1 > file2 //如果不想覆蓋原文件可以這樣 enca -L zh_CN -x utf8 <quad.c >quadTest.c
亂碼-ubuntu下文檔的文件名到windows下變?yōu)開__下劃線
現(xiàn)象:Windows下編輯過的中文文檔,Ubuntu下會(huì)顯示亂碼。
原因:兩個(gè)操作系統(tǒng)使用的編碼不同。Ubuntu下使用的編碼是utf-8,而Windows使用的是gb18030。
ubuntu16.04解決文件中文亂碼問題
1、查看當(dāng)前系統(tǒng)使用的字符編碼
~$ locale LANG=en_US LANGUAGE=en_US: LC_CTYPE="en_US" LC_NUMERIC="en_US" LC_TIME="en_US" LC_COLLATE="en_US" LC_MONETARY="en_US" LC_MESSAGES="en_US" LC_PAPER="en_US" LC_NAME="en_US" LC_ADDRESS="en_US" LC_TELEPHONE="en_US" LC_MEASUREMENT="en_US" LC_IDENTIFICATION="en_US" LC_ALL=
2、查看當(dāng)前系統(tǒng)支持的字符集
:~$ locale -a C C.UTF-8 en_US en_US.iso88591 en_US.utf8 POSIX
3、查看locale文件
:~$ cat /etc/default/locale # File generated by update-locale LANG="en_US" LANGUAGE="en_US:"
解決:
1、執(zhí)行l(wèi)ocale-gen zh_CN.UTF-8拉取中文編碼(需要root權(quán)限)
:~$ locale-gen zh_CN.UTF-8 sed: couldn't open temporary file /etc/sedMLPzNn: Permission denied deployer@RSLog026:~$ sudo su [sudo] password for deployer: root@RSLog026:/home/deployer# locale-gen zh_CN.UTF-8 Generating locales (this might take a while)... zh_CN.UTF-8... done
2、查看現(xiàn)在系統(tǒng)支持的字符集,發(fā)現(xiàn)多了zh_*等中文字符集
:~$ locale -a C C.UTF-8 en_US en_US.iso88591 en_US.utf8 POSIX zh_CN zh_CN.gb2312 zh_CN.gbk zh_CN.utf8
3、修改文件/etc/default/locale(必須要改,,開始還以為不該也行,發(fā)現(xiàn)如果不改這個(gè)文件,需要執(zhí)行兩遍第四步操作)
當(dāng)前文件 :~$ cat /etc/default/locale # File generated by update-locale LANG="en_US" LANGUAGE="en_US:" 改成如下: :~$ cat /etc/default/locale # File generated by update-locale LANG=zh_CN.UTF-8 #LANGUAGE="en_US:"
4、執(zhí)行sudo dpkg-reconfigure locales命令,由于不能截圖,這里語言描述下了。
選中 zh_CN GB2312,zh_CN.GBK GBK,zh_CN.UTF-8 UTF-8 按空格就是選中,然后tab鍵到ok,點(diǎn)擊ok以后會(huì)跳轉(zhuǎn)到下一界面,選中zh_CN.UTF-8,,然后ok就可以了
接下來重新打開會(huì)話就能正常使用中文了,不用重啟系統(tǒng)。
查看當(dāng)前系統(tǒng)使用的字符編碼
locale LANG=zh_CN.UTF-8 LANGUAGE=zh_CN:en_US:en LC_CTYPE="zh_CN.UTF-8" LC_NUMERIC=zh_CN.UTF-8 LC_TIME=zh_CN.UTF-8 LC_COLLATE="zh_CN.UTF-8" LC_MONETARY=zh_CN.UTF-8 LC_MESSAGES="zh_CN.UTF-8" LC_PAPER=zh_CN.UTF-8 LC_NAME=zh_CN.UTF-8 LC_ADDRESS=zh_CN.UTF-8 LC_TELEPHONE=zh_CN.UTF-8 LC_MEASUREMENT=zh_CN.UTF-8 LC_IDENTIFICATION=zh_CN.UTF-8 LC_ALL=
查看當(dāng)前系統(tǒng)支持的字符集
locale -a C C.UTF-8 en_AG en_AG.utf8 en_AU.utf8 en_BW.utf8 en_CA.utf8 en_DK.utf8 en_GB.utf8 en_HK.utf8 en_IE.utf8 en_IL en_IL.utf8 en_IN en_IN.utf8 en_NG en_NG.utf8 en_NZ.utf8 en_PH.utf8 en_SG.utf8 en_US.utf8 en_ZA.utf8 en_ZM en_ZM.utf8 en_ZW.utf8 POSIX zh_CN.utf8 zh_SG.utf8
執(zhí)行l(wèi)ocale-gen zh_CN.UTF-8拉取中文編碼
sudo locale-gen zh_CN.* Generating locales (this might take a while)... zh_CN.GB18030... done zh_CN.GB2312... done zh_CN.GBK... done zh_CN.UTF-8... done Generation complete.
查看現(xiàn)在系統(tǒng)支持的字符集,發(fā)現(xiàn)多了zh_*等中文字符集
locale -a C C.UTF-8 en_AG en_AG.utf8 en_AU.utf8 en_BW.utf8 en_CA.utf8 en_DK.utf8 en_GB.utf8 en_HK.utf8 en_IE.utf8 en_IL en_IL.utf8 en_IN en_IN.utf8 en_NG en_NG.utf8 en_NZ.utf8 en_PH.utf8 en_SG.utf8 en_US.utf8 en_ZA.utf8 en_ZM en_ZM.utf8 en_ZW.utf8 POSIX zh_CN zh_CN.gb18030 zh_CN.gb2312 zh_CN.gbk zh_CN.utf8 zh_SG.utf8
亂碼-windows下文檔移到linux下文件顯示亂碼
上面的方法可以實(shí)現(xiàn)在gedit軟件下,正確顯示,但是在vim文檔下顯示如下
°üo?μ?Dé?a?úID£??°??·?2?·?ê?
但在gedit軟件中打開實(shí)際上是
包含的虛擬機(jī)ID,及其分布方式
查看文件的編碼方式
file debug_tran.cpp debug_tran.cpp: C++ source, ISO-8859 text, with CRLF line terminators
由于我的vim 配置里面顯示了文件的格式,我的vim顯示如下
dos latin1 cpp
經(jīng)過查詢可知:Latin1是ISO-8859-1的別名,有些環(huán)境下寫作Latin-1。此字符集支持部分于歐洲使用的語言,所以中文顯示亂碼。
可以采用下面的命令轉(zhuǎn)換
iconv -f gbk -t utf8 debug_tran.cpp.gbk > debug_tran.cpp.utf
查找新產(chǎn)生的文件
file debug_tran.cpp.utf debug_tran.cpp.utf: C++ source, UTF-8 Unicode text, with CRLF line terminators
使用下面的語句查看具體選項(xiàng)
iconv --help
在windows中打開linux文檔建議使用notepad++文件打開,在里面可以修改不同編碼。
亂碼分類表
相關(guān)文章
Win12發(fā)布時(shí)間曝光?微軟或?qū)?duì)Windows進(jìn)行重大更新
微軟目前或許已經(jīng)準(zhǔn)備將于2024年推出為代號(hào)Windows 11 24H2或Windows 12的版本,下文為大家?guī)砹嗽敿?xì)介紹,一起看看吧2023-12-07windows server哪個(gè)版本穩(wěn)定? Windows Server各版本差異介紹
Windows Server是微軟為企業(yè)提供的服務(wù)器操作系統(tǒng),提供了許多高級(jí)的IT功能,例如數(shù)據(jù)存儲(chǔ)、網(wǎng)絡(luò)管理、安全性和虛擬化等,在眾多的Windows Server版本中,最好用的版本可能2023-11-29Windows系統(tǒng)目錄CoreMessaging.dll文件丟失該怎么解決?
Windows系統(tǒng)目錄CoreMessaging.dll文件丟失該怎么解決?用戶們可以去下載coremessaging.dll文件就可以了,詳細(xì)請(qǐng)看下文介紹2023-11-21windows磁盤0動(dòng)態(tài)無效外部不可用怎么辦? 電腦所有磁盤屬性為動(dòng)態(tài)的解決
windows磁盤0動(dòng)態(tài)無效外部不可用怎么辦?windows系統(tǒng)電腦的磁盤屬性為動(dòng)態(tài),不能用,該怎么辦呢?下面我們就來看看電腦所有磁盤屬性為動(dòng)態(tài)的解決辦法2023-10-20電腦雙系統(tǒng)怎么分區(qū)? 雙系統(tǒng)電腦硬盤分區(qū)技巧
電腦雙系統(tǒng)怎么分區(qū)?很多電腦安裝了雙系統(tǒng),該怎么給雙系統(tǒng)分區(qū)呢?下面我們就來看看雙系統(tǒng)電腦硬盤分區(qū)技巧2025-04-03xcopy命令怎么用? Windows命令行XCOPY幾種應(yīng)用方法
xcopy命令怎么用?Windows系統(tǒng)中有很多命令可以快速執(zhí)行某種操作,今天我們就來看看命令行XCOPY幾種應(yīng)用方法2023-10-13Windows系統(tǒng)關(guān)閉當(dāng)前應(yīng)用程序或窗口的快捷鍵有哪些?
Windows系統(tǒng)關(guān)閉當(dāng)前應(yīng)用程序或窗口的快捷鍵有哪些?windows系統(tǒng)中經(jīng)常會(huì)用各種快捷鍵操作,怎么關(guān)閉當(dāng)前窗口呢?詳細(xì)請(qǐng)看下文介紹2023-09-05API-MS-WIN-CRT-RUNTIME-L1-1-0.DLL丟失了怎么修復(fù)?
電腦提示:無法定位程序輸入點(diǎn)usctbase.abort于動(dòng)態(tài)鏈接庫api-ms-win-crt-runtime-l1-1-0.dll,該怎么解決這個(gè)問題呢?詳細(xì)請(qǐng)看下文介紹2023-07-13為什么Windows中的文件會(huì)損壞? windows文件受損的阻止和修復(fù)方法
為什么Windows中的文件會(huì)損壞?打開文件提示無法訪問,這是很多用戶都會(huì)遇到的難題,下面我們就來看看windows文件受損的阻止和修復(fù)方法2023-07-05server2012藍(lán)屏代碼DPC WATCHDOG VIOLATION怎么解決?
server2012藍(lán)屏代碼DPC WATCHDOG VIOLATION怎么解決?server2012系統(tǒng)突然藍(lán)屏,并顯示終止代碼:DPC WATCHDOG VIOLATION,下面我們就來看看藍(lán)屏原因和解決辦法2023-05-17