位元組:byte=8bit 位元組是給計算機用的
字符:character(一般2byte) 字符是給人看的
位元組是字符的基礎,底層傳輸使用都是位元組,上層展示是在位元組的基礎上根據字符集規則進行編碼
ascii碼:1byte 對應 1char
unicode:一種規則集合,集合中utf-8,utf16,utf32等
utf-8:一個/多個 byte 對應 1char,前面256個char都是一個位元組跟ascii碼一致,所以ascii是一種特殊的utf8
utf16:兩個 byte 對應 1char,ascii碼中每個字符也是用2byte標識,前面補0
utf32:
中文:中文漢字超過10萬個,所以2的16次方即65536都不夠
目前采集的標準是gb18030,一個/兩個/四個 對應 1char
big5
java在讀寫檔案的時候一種是位元組流,一種是字符流,其中字符流=位元組流+編碼方式
位元組流:inputstream,outputstream
字符流:inputstreamreader(inputstream+charset+reader),outputstreamwriter(outputstream+charset+writer)
java string
程式在編碼的時候,有默認的字符編碼
eg:String str=“我是中文” (UTF8編碼)
如果指定的是UTF8,那么轉化成位元組的值 byte []chars=s.getbytes(“UTF-8”) 12bytes
如果指定GBK,那么轉化成位元組的值 byte []chars=s.getbytes(“GBK”) 8bytes
也就是我們平時的string稱之為字串,跟字符編碼是息息相關的
讀寫檔案:
檔案一般是用來給人閱讀或者編輯的,所以一般檔案都是做了編碼之后保存的,那么在讀取的時候,一定要根據編碼進行讀寫,編碼不一致的問題,假設檔案本身是utf8的,讀取用gbk,這時候可能會把本身是一個整體的字符拆成了兩個字符從而改變了它的含義,如果只讀不做中間處理,然后寫的時候用的還是相同編碼,那么中間編碼無所謂,這時候用位元組流讀取最合適,
檔案轉化:
比喻說excel轉化csv,excel保存起來的時候是有編碼的,決議成csv的時候,我們可以按照位元組流讀取,因為我們不需要知道它長什么樣也不需要做中間處理,只需要按照流的方式從非文本檔案讀出來然后寫進文本檔案,讀取程序是位元組流,但是寫入的時候必須是字符流,因為要做字符識別,這時候就需要讓excel的編碼跟寫入文本檔案的編碼一致,不然會亂碼,
其實檔案保存的是位元組流(傳輸,保存都是位元組流,使用是字符流),然后文本檔案按照編碼方式編碼之后展示出來,在記憶體中,我們主要是用字符流做判斷,比喻判斷兩個漢字是否相同,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/277021.html
標籤:其他
