1、
計算機中檔案、資料底層都是基於二進位制的。
字符集:包含著字元和二進位制序列之間的對應關係,乙個字元對應乙個二進位制序列。
編碼(encode):把人能看懂的明文轉換為計算機能理解二進位制序列。
解碼(decode):把計算機中的二進位制序列轉換為人能看懂的明文。
亂碼:解碼方式與編碼方式不同,即編碼、解碼使用的字符集不一致。
windows中文字檔案的預設字符集是gbk。
2、位元組的檔案輸出流可以指定寫入模式:
fileoutputstream fos=new fileoutputstream(string/file file);
fileoutputstream fos=new fileoutputstream(string/file file,boolean b); //第二個引數指定是否是追加模式,true——追加,false——覆蓋。
字元的檔案流可以指定字符集:
filewriter fw=new filewriter(string/file file);
filereader fr=new filereader(string/file file);
//指定字符集
filewriter fw=new filewriter(string/file file, string/charset charset);
filereader fr=new filereader(string/file file, string/charset charset);
//字元的檔案輸出流還可以指定寫入模式
filewriter fw=new filewriter(string/file file, boolean b ); //是否是追加模式
filewriter fw=new filewriter(string/file file, string/charset charset, boolean b);
2個轉換流可以指定編碼/解碼的字符集:
inputstreamreader isr=new inputstreamreader(inputstream is, string/charset charset); //指定解碼字符集
outputstreamwriter osr=new outputstreamwriter(outputstream os, string/charset charset); //指定編碼字符集
3、nio中的charset類
//建立charset物件,指定編碼/解碼用的字符集
charset charset=charset.forname(「gbk」);
//建立編碼器
charsetencoder encoder=charset.newencoder();
//使用編碼器進行編碼。編碼是把字串行轉換為位元組序列,引數只能是charbuffer型別,返回值是bytebuffer型別
bytebuffer bytebuffer=encoder.encode(charbuffer charbuffer);
//建立解碼器
charsetdecoder decoder=charset.newdecoder();
//使用解碼器進行解碼。解碼是把位元組序列轉換為字串行,引數為bytebuffer型別,返回值是charbuffer型別
charbuffer charbuffer=decoder.decode(bytebuffer bytebuffer);
也可以不建立編碼器、解碼器:
//建立charset物件,指定編碼/解碼用的字符集
charset charset=charset.forname(「gbk」);
//編碼
bytebuffer bytebuffer=charset.encode(string str); //此處可使用string做引數
bytebuffer bytebuffer=charset.encode(charbuffer charbuffer);
//解碼
charbuffer charbuffer=charset.decode(bytebuffer bytebuffer);
更加簡單。
string類的物件還可以使用以下方法將string(字串行)編碼為byte(位元組序列):
byte getbytes() //使用平台預設的字符集
byte getbytes(string/charset charset) //使用指定的字符集
返回編碼好的位元組序列。
原文:
字符集 編碼
字符集概念 1 字符集 可以表示的字元和字元對應計算機位元組碼的對映 2 字元編碼方式 計算機中用來表示和傳輸如前所述字符集中對映的位元組碼的編碼方式。對於ascii和gb2312等字符集,他們在傳輸和計算機表示時的位元組碼不用編碼,直接用字元對應的位元組碼表示。但比如unicode 字符集,就有多...
字符集編碼
喬哥 小萌,聽說你去面試了,怎麼樣啊?小萌 哎 喬哥,你給我講講什麼是字符集和編碼唄,ascii,utf 8,utf 16,utf 32又是啥?喬哥 好的,在搞懂字符集先來講講什麼是編碼吧 在計算機底層,比如說你的名字 小萌 在計算機中並不是文字的形式,而是一串二進位制數字,如 0110011001...
字符集編碼
references 字元編碼中ascii unicode和utf 8的區別 ascii碼 unicode編碼 utf 8編碼的區別 條目ascii unicode utf 8 占用byte數 12,不常用的字元占用4個 變長的編碼方式,將乙個unicode字元編碼成1 6個字元。常用的英文本母被編...