這篇文章主要介紹“java中的編碼轉(zhuǎn)化方式有哪些”,在日常操作中,相信很多人在java中的編碼轉(zhuǎn)化方式有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”java中的編碼轉(zhuǎn)化方式有哪些”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
專注于為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)湖里免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
很早之前計(jì)算機(jī)存儲(chǔ)的就只是英文,一共26個(gè)英文字母。而且計(jì)算機(jī)存儲(chǔ)信息的最小單位是一個(gè)字節(jié)8位,能夠表示256個(gè)字符。這對(duì)于早起的英文來說足夠了。即使是加上一些常見符號(hào)也足夠。
后來隨著時(shí)間的發(fā)展,中國、日本等國的計(jì)算機(jī)也開始蓬勃發(fā)展,于是計(jì)算機(jī)不僅僅要存儲(chǔ)英文了,也開始存儲(chǔ)中文了。但是中文我們都知道幾萬個(gè)太多了,一個(gè)字節(jié)肯定放不下。怎么辦呢?一個(gè)字節(jié)表示不下,那就多用幾個(gè)字節(jié)就好了。這幾個(gè)字節(jié)在存儲(chǔ)的時(shí)候還要再轉(zhuǎn)化為bit,這時(shí)候就要涉及到編碼了。
計(jì)算中提供了多種編碼方式,常見的有 ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16 等。它們規(guī)定了轉(zhuǎn)化的規(guī)則,按照這個(gè)規(guī)則就可以讓計(jì)算機(jī)正確的表示我們的字符。
像GB2312、GBK、UTF-8、UTF-16等很多種方式都可以表示漢字,他們有什么區(qū)別呢?
(1)GB2312
它是雙字節(jié)編碼,總的編碼范圍是 A1-F7,其中從 A1-A9 是符號(hào)區(qū),總共包含 682 個(gè)符號(hào),從 B0-F7 是漢字區(qū),包含 6763 個(gè)漢字。
(2)GBK
它的編碼范圍是 8140~FEFE(去掉 XX7F)總共有 23940 個(gè)碼位,它能表示 21003 個(gè)漢字。
(3)UTF-8
而 UTF-8 采用了一種變長技術(shù),每個(gè)編碼區(qū)域有不同的字碼長度。不同類型的字符可以是由 1~6 個(gè)字節(jié)組成。
(1)IO流
這里就是面試問題的核心答案了,編碼的目的上面已經(jīng)說了,主要是字節(jié)和字符之間的轉(zhuǎn)化。既然涉及到字節(jié)和字符很容易我們就能想到j(luò)ava中的IO流。也就是說java中編碼的轉(zhuǎn)換其實(shí)就是IO流中的類來實(shí)現(xiàn)的。
最核心的就是上面幾個(gè)類,當(dāng)然這里只是給出了輸入的一部分,還有一些輸出的類。
(2)String
String類中也提供了一些轉(zhuǎn)碼的方法。下面我們會(huì)通過實(shí)例來說明。為什么String可以實(shí)現(xiàn)呢?這是因?yàn)镾tring底層保存的其實(shí)就是一個(gè)一個(gè)字節(jié),而且String還有方法直接轉(zhuǎn)化為字符。所以String肯定也能實(shí)現(xiàn)。
(3)Charset
這個(gè)Charset是javaNIO中的一個(gè)類,整個(gè)流程就是讀取數(shù)據(jù),然后轉(zhuǎn)化為byte,也就是字符。然后重新編碼成字符就OK了。
下面我們使用代碼來實(shí)現(xiàn)一下:
public void convertionFile() throws IOException {
File file = new File("D://fdd/java的架構(gòu)師技術(shù)棧.txt");
FileInputStream fis = new FileInputStream(file);
InputStreamReader inReader = new InputStreamReader(fis, "gbk");
FileOutputStream fos = new FileOutputStream(file);
OutputStreamWriter outReader = new OutputStreamWriter(fos, "utf-8");
}
public void convertionString() throws UnsupportedEncodingException {
String s = "java的架構(gòu)師技術(shù)棧";
// 正常情況下轉(zhuǎn)碼的過程
byte[] b = s.getBytes("gbk");// 編碼
String sa = new String(b, "gbk");// 解碼
System.out.println(sa);
// 錯(cuò)誤狀態(tài)下轉(zhuǎn)碼的過程
b = sa.getBytes("utf-8");// 編碼
sa = new String(b, "utf-8");// 解碼
System.err.println(sa);
}
public void convertionCharset() throws IOException {
Charset charset = StandardCharsets.UTF_8;
// 從字符集中創(chuàng)建相應(yīng)的編碼和解碼器
CharsetEncoder encoder = charset.newEncoder();
CharsetDecoder decoder = charset.newDecoder();
// 構(gòu)造一個(gè)buffer
CharBuffer charBuffer = CharBuffer.allocate(64);
charBuffer.put('A');
charBuffer.flip();
// 將字符序列轉(zhuǎn)換成字節(jié)序列
ByteBuffer bb = encoder.encode(charBuffer);
// 將字節(jié)序列轉(zhuǎn)換成字符序列
bb.flip();
CharBuffer cb = decoder.decode(bb);
}
到此,關(guān)于“java中的編碼轉(zhuǎn)化方式有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
網(wǎng)頁名稱:java中的編碼轉(zhuǎn)化方式有哪些
路徑分享:http://jinyejixie.com/article46/ggieeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、品牌網(wǎng)站制作、面包屑導(dǎo)航、關(guān)鍵詞優(yōu)化、網(wǎng)站導(dǎo)航、用戶體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)