字符編碼 亂碼問題
阿新 • • 發佈:2018-09-09
階段 方式 失敗 漢字 毫無 錯誤 輸入 不能 字符
字符編碼 亂碼問題
首先明確概念 #1、文件從內存刷到硬盤的操作簡稱存文件 #2、文件從硬盤讀到內存的操作簡稱讀文件 亂碼的兩種情況: #亂碼一:存文件時就已經亂碼 存文件時,由於文件內有各個國家的文字,我們單以shiftjis去存, 本質上其他國家的文字由於在shiftjis中沒有找到對應關系而導致存儲失敗 但當我們硬要存的時候,編輯並不會報錯(難道你的編碼錯誤,編輯器這個軟件就跟著崩潰了嗎???),但毫無疑問,不能存而硬存,肯定是亂存了,即存文件階段就已經發生亂碼 而當我們用shiftjis打開文件時,日文可以正常顯示,而中文則亂碼了 #用open模擬編輯器的過程 可以用open函數的write可以測試,f=open(‘a.txt‘,‘w‘,encodig=‘shift_jis‘ f.write(‘你瞅啥\n何を見て\n‘) #‘你瞅啥‘因為在shiftjis中沒有找到對應關系而無法保存成功,只存‘何を見て\n‘可以成功 #以任何編碼打開文件a.txt都會出現其余兩個無法正常顯示的問題 f=open(‘a.txt‘,‘wb‘) f.write(‘何を見て\n‘.encode(‘shift_jis‘)) f.write(‘你愁啥\n‘.encode(‘gbk‘)) f.write(‘你愁啥\n‘.encode(‘utf-8‘)) f.close() #亂碼二:存文件時不亂碼而讀文件時亂碼 存文件時用utf-8編碼,保證兼容萬國,不會亂碼,而讀文件時選擇了錯誤的解碼方式,比如gbk,則在讀階段發生亂碼,讀階段發生亂碼是可以解決的,選對正確的解碼方式就ok了,
解決2點
#1、保證不亂嗎的核心法則就是,字符按照什麽標準而編碼的,就要按照什麽標準解碼,此處的標準指的就是字符編碼 #2、在內存中寫的所有字符,一視同仁,都是unicode編碼,比如我們打開編輯器,輸入一個“你”,我們並不能說“你”就是一個漢字,此時它僅僅只是一個符號,該符號可能很多國家都在使用,根據我們使用的輸入法不同這個字的樣式可能也不太一樣。只有在我們往硬盤保存或者基於網絡傳輸時,才能確定”你“到底是一個漢字,還是一個日本字,這就是unicode轉換成其他編碼格式的過程了
字符編碼 亂碼問題