檔損壞怎么辦?
昨天下午,天津某醫(yī)院主任醫(yī)師張先生來(lái)到鴻萌數(shù)據(jù)安全中心求助,他的花費(fèi)將近一年時(shí)間寫的一份科研論文出了問(wèn)題,現(xiàn)在打開(kāi)全是亂碼。
事情的起因是這樣的,昨天上午,張先生插上U盤,將這份文檔打開(kāi),進(jìn)行編輯,后來(lái)因?yàn)橛惺滦枰R上外出,張先生沒(méi)有保存并正常關(guān)閉這份文檔,就將U盤拔下來(lái)出去了。等下午他又重新打開(kāi)這個(gè)文檔的時(shí)候,就出現(xiàn)了亂碼的問(wèn)題。如下圖(為保護(hù)客戶隱私,相關(guān)部分做了遮蔽處理):
客戶損壞的文檔
鴻萌工程師利用碎片文檔恢復(fù)處理技術(shù)成功將客戶文檔恢復(fù)至張先生文檔損壞前一天的狀態(tài),為張先生節(jié)省了寶貴時(shí)間,也避免了花費(fèi)精力去重新寫這篇論文。
日常生活中我們經(jīng)常會(huì)遇到WORD、EXCEL或者PPT等文檔損壞的情況,這時(shí),您千萬(wàn)不要再在損壞文檔的分區(qū)或者U盤等存儲(chǔ)介質(zhì)上,做反復(fù)的打開(kāi)嘗試,避免數(shù)據(jù)遭到徹底破壞。因?yàn)槲臋n損壞設(shè)計(jì)磁盤底層碎片的操作,所以不建議客戶自己嘗試操作,最好的辦法就是立即關(guān)閉計(jì)算機(jī)找專業(yè)數(shù)據(jù)安全公司協(xié)助。
鴻萌在數(shù)據(jù)安全行業(yè)已經(jīng)默默耕耘了十三年,專業(yè)的數(shù)據(jù)修復(fù)技術(shù)和豐富的實(shí)踐經(jīng)驗(yàn)是您珍貴數(shù)據(jù)安全恢復(fù)的保障。我們隨時(shí)歡迎您的咨詢。
中文亂碼問(wèn)題在我們?nèi)粘i_(kāi)發(fā)中司空見(jiàn)慣,那么亂碼問(wèn)題是如何產(chǎn)生的呢?又怎樣去解決亂碼問(wèn)題呢?本文將結(jié)合基本概念和例子展開(kāi)闡述,希望大家有收獲。
package whx;
import java.io.UnsupportedEncodingException;
public class TestEncodeAndDecode {
public static void main(String[] args) throws UnsupportedEncodingException {
String str="測(cè)試中文亂碼";
byte[] b=str.getBytes("GBK");
System.out.println(new String (b,"UTF-8"));
}
}
復(fù)制代碼
用GBK編碼,用utf-8解碼,產(chǎn)生亂碼,運(yùn)行結(jié)果如下:
要理解亂碼的根源,需要先了解清楚位、字節(jié)、字符、字符集等相關(guān)概念。
位是計(jì)算機(jī)存儲(chǔ)數(shù)據(jù)的最小單位,1或者0就表示1位,如10010010就表示8位的二進(jìn)制數(shù)。
字節(jié)是計(jì)算機(jī)信息技術(shù)用于計(jì)量存儲(chǔ)容量的一種計(jì)量單位,作為一個(gè)單位來(lái)處理的一個(gè)二進(jìn)制數(shù)字串,是構(gòu)成信息的一個(gè)小單位。
1 B=8 bit (1字節(jié)等于8位)
1 KB=1024 B=1024 字節(jié)
1 MB=1024 KB
1 GB=1024 MB
1 TB=1024 GB
復(fù)制代碼
字符是指計(jì)算機(jī)中使用的字母、數(shù)字、字和符號(hào),是數(shù)據(jù)結(jié)構(gòu)中最小的數(shù)據(jù)存取單位。如a、A、B、b、大、+、*、%等都表示一個(gè)字符;
在 ASCII 編碼中,一個(gè)英文字母字符存儲(chǔ)需要1個(gè)字節(jié)。
在 GB 2312 編碼或 GBK編碼中,一個(gè)漢字字符存儲(chǔ)需要2個(gè)字節(jié)。
在UTF-8編碼中,一個(gè)英文字母字符存儲(chǔ)需要1個(gè)字節(jié),一個(gè)漢字字符儲(chǔ)存需要3到4個(gè)字節(jié)。
在UTF-16編碼中,一個(gè)英文字母字符或一個(gè)漢字字符存儲(chǔ)都需要2個(gè)字節(jié)
在UTF-32編碼中,世界上任何字符的存儲(chǔ)都需要4個(gè)字節(jié)
復(fù)制代碼
字符集是多個(gè)字符的集合,字符集種類較多,每個(gè)字符集包含的字符個(gè)數(shù)不同。常見(jiàn)字符集名稱:
ASCII字符集
GB2312字符集
Unicode字符集
復(fù)制代碼
計(jì)算機(jī)只認(rèn)識(shí)二進(jìn)制的1和0,而人類都是有自己的語(yǔ)言的,雙方要能進(jìn)行信息交流,必須要有從文字到0、1的轉(zhuǎn)化,以及0、1到文字轉(zhuǎn)化。
編碼: 就是將文本字符轉(zhuǎn)換成計(jì)算機(jī)可以識(shí)別的0、1機(jī)器碼。
解碼: 將存儲(chǔ)在計(jì)算機(jī)中的二進(jìn)制數(shù)解析成文字、字符。
常見(jiàn)字符集有ASCII、GBK、Unicode等
ASCII字符集:它包括英文字母、阿拉伯?dāng)?shù)字和西文符號(hào)等可顯示字符,以及回車鍵、退格等控制字符。
ASCII 編碼:它是美國(guó)制定的字符編碼,用于將英語(yǔ)字符轉(zhuǎn)化為二進(jìn)制,規(guī)定了128個(gè)字符的編碼。
GBXXXX系列包括GB2312、GBK、GB18030,適用于漢字處理、漢字通信等系統(tǒng)之間的信息交換。
GB2312
GBK
GB18030
Unicode是國(guó)際組織制定的可以容納世界上所有文字和符號(hào)的字符編碼方案。UNICODE字符集有多種編碼方式,分別是UTF-8,UTF-16和UTF-32。
UTF-8
UTF-16
UTF-32
我們敲代碼的程序員,接觸最多的就是“hello word”。計(jì)算機(jī)只認(rèn)識(shí)0和1,它是怎么展示hello word的呢?
上一小節(jié),我們已經(jīng)知道編碼、字符集的知識(shí)。我們可以用ASCII編碼,把“hello word”翻譯成計(jì)算機(jī)認(rèn)識(shí)的0、1。有興趣的朋友可以去查一下 ASCII對(duì)照表
計(jì)算機(jī)存儲(chǔ)的是hello world的0、1二進(jìn)制碼,先將二進(jìn)制碼解碼成對(duì)應(yīng)的字符,然后在屏幕上渲染出來(lái),我們看到的就是hello world了
亂碼產(chǎn)生的原因主要有兩個(gè),一是文本字符編碼過(guò)程與解碼過(guò)程使用了不同的編碼方式,二是使用了缺少某種字體庫(kù)的字符集引起的亂碼。
例子中,用了utf-8編碼,使用了GBK解碼,結(jié)果產(chǎn)生了亂碼。因?yàn)樵趗tf-8中,一個(gè)漢字用三個(gè)字節(jié)編碼,而GBK中,每個(gè)漢字用兩個(gè)字節(jié)表示,所以產(chǎn)生了亂碼。
我們知道GB2312是不支持繁體字的,所以使用缺少某種字體庫(kù)的字符集編碼,會(huì)產(chǎn)生亂碼。
使用支持要展示字體的字符集編碼,并且編解碼使用同一種編碼方式,就可以解決亂碼問(wèn)題了。
接下來(lái)列舉一下亂碼的經(jīng)典場(chǎng)景與解決方案
IDE項(xiàng)目中的中文亂碼問(wèn)題?File->settings->Editor->File Encodings,設(shè)置一下編碼方式utf-8
IDE控制臺(tái)中文亂碼?嘗試一下這種方式,打開(kāi)IDE安裝目錄,找到
在文本末尾添加-Dfile.encoding=UTF-8
查看數(shù)據(jù)庫(kù)編碼:
show variables like 'character_set%'
復(fù)制代碼
設(shè)置session、global范圍的編碼方式
//session 范圍
set character_set_server=utf8;
set character_set_database=utf8;
//global 范圍
set global character_set_database=utf8;
set global character_set_server=utf8;
復(fù)制代碼
session、global范圍編碼,重啟mysql可能編碼又變回去了,可以嘗試另外一種方式。在mysql(windows環(huán)境)的my.ini配置文件中修改或添加下列內(nèi)容
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8
[client]
default-character-set=utf8
復(fù)制代碼
寫代碼的時(shí)候出現(xiàn)中文亂碼?追蹤定位到編碼解碼的地方,設(shè)置用同一種編碼方式。
需更加深入學(xué)習(xí)java知識(shí)的小伙伴以及即將參加面試的小伙伴可以購(gòu)買以下教程哦!
多朋友在打開(kāi)word文檔的時(shí)候會(huì)出現(xiàn)亂碼,小編曾經(jīng)也遇到過(guò)這個(gè)問(wèn)題。word打開(kāi)亂碼可能原因有很多種,小編收集了一些解決方法,有問(wèn)題的朋友可以逐個(gè)去試試。
word打開(kāi)是亂碼解決方法六:顯示域值
單擊菜單“文件”——“選項(xiàng)”,此時(shí)會(huì)打開(kāi)一個(gè)“Word 選項(xiàng)”窗口,我們切換到“高級(jí)”項(xiàng),然后去掉勾選“顯示文檔內(nèi)容”區(qū)域中的“顯示域代碼而非域值”選項(xiàng),并單擊“確定”按鈕。
word打開(kāi)是亂碼解決方法一:打開(kāi)并修復(fù)
單擊菜單“文件”——“打開(kāi)”,選擇要恢復(fù)的文件,單擊“打開(kāi)”按鈕旁邊的箭頭,然后單擊“打開(kāi)并修復(fù)”。
word打開(kāi)是亂碼解決方法二:提取文字
單擊菜單“工具”——“選項(xiàng)”——“常規(guī)”選項(xiàng)卡,勾選“打開(kāi)時(shí)確認(rèn)轉(zhuǎn)換”復(fù)選框, “確定”。 按ctrl+O,彈出打開(kāi)對(duì)話框,在“文件類型”框中,單擊“從任意文件中恢復(fù)文本”,和正常一樣打開(kāi)文檔。
word打開(kāi)是亂碼解決方法三:轉(zhuǎn)換文檔格式
將word打開(kāi)是亂碼的文件轉(zhuǎn)換為另一種格式,然后再將其轉(zhuǎn)換回Word 文檔格式。打開(kāi)受損文檔,另存為,“保存類型”為:RTF 格式(*.rtf)。
當(dāng)轉(zhuǎn)換成rtf格式后Word打開(kāi)仍然是亂碼,可以將文件再次轉(zhuǎn)換為純文本格式(*.txt),再轉(zhuǎn)換回.doc格式。不過(guò),轉(zhuǎn)為txt文件,所有的圖片和表格等信息會(huì)丟失。
word打開(kāi)是亂碼解決方法四:刪除格式信息法
刪除格式信息有時(shí)也能解決Word亂碼問(wèn)題。打開(kāi)亂碼文檔,單擊菜單“工具——選項(xiàng)——編輯”標(biāo)簽,不勾選“使用智能段落選擇范圍”,然后將這些內(nèi)容粘貼復(fù)制到新的word中。
word打開(kāi)是亂碼解決方法五:查毒和禁止自動(dòng)宏的運(yùn)行
查看電腦和文檔是否遭病毒入侵。
如果某個(gè)Word文檔中包含有錯(cuò)誤的自動(dòng)宏代碼,當(dāng)試圖打開(kāi)該文檔時(shí),其中的自動(dòng)宏由于錯(cuò)誤不能正常運(yùn)行,從而引發(fā)不能打開(kāi)文檔的錯(cuò)誤。在“Windows資源管理器”中,按Shift鍵,再雙擊該Word文檔,可阻止自動(dòng)宏的運(yùn)行,從而能夠打開(kāi)文檔。
以上就是常見(jiàn)的Word文檔打開(kāi)是亂碼的解決方法,如果以上方法還不能解決,那我建議重新安裝下Word試試。