1. 程式人生 > >字符編碼 亂碼問題

字符編碼 亂碼問題

階段 方式 失敗 漢字 毫無 錯誤 輸入 不能 字符

字符編碼 亂碼問題

首先明確概念
#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轉換成其他編碼格式的過程了

字符編碼 亂碼問題