最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

您好,請問為什么使用forName("UTF-8")會出錯,使用GBK就行呢?

您好,請問為什么使用forName("UTF-8")會出錯,使用GBK就行呢?

精慕HU 2021-11-02 11:07:03
public class CharsetTransform { public static void main(String[] args) throws Exception {// Properties properties = System.getProperties();// for (Object key : properties.keySet()) {// String name = (String) key;// System.out.println(name + "------>" + properties.get(key));// } //file.encoding------>UTF-8 // 創(chuàng)建簡體中文對應(yīng)的Charset Charset cn = Charset.forName("UTF-8"); // 獲取cn對象對應(yīng)的編碼器和解碼器 CharsetEncoder cnEncoder = cn.newEncoder(); CharsetDecoder cnDecoder = cn.newDecoder(); // 創(chuàng)建一個CharBuffer對象 CharBuffer cbuff = CharBuffer.allocate(20); cbuff.put('隨'); cbuff.put('便'); cbuff.flip(); // 將CharBuffer中的字符序列轉(zhuǎn)換成字節(jié)序列 ByteBuffer bbuff = cnEncoder.encode(cbuff); // 循環(huán)訪問ByteBuffer中的每個字節(jié) for (int i = 0; i < bbuff.capacity(); i++) { System.out.print(bbuff.get(i) + " "); } // 將ByteBuffer的數(shù)據(jù)解碼成字符序列 System.out.println("\n" + cnDecoder.decode(bbuff)); }}
查看完整描述

2 回答

?
嚕嚕噠

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個贊

由于使用UTF-8和GBK編碼在把字符CharBuffer轉(zhuǎn)成ByteBuffer時候分配的字節(jié)容量capacity不一樣導(dǎo)致的,如果你設(shè)置的編碼是UTF-8,那么在在執(zhí)行cnEncoder.encode(cbuff),分配字節(jié)容量的源碼如下所示:


int n = (int)(in.remaining() * averageBytesPerChar());ByteBuffer out = ByteBuffer.allocate(n);

UTF-8編碼情況下,分配的時候,capacity會比limit大,而GBK下,capacity和limit是一樣大。所以UTF-8情況下,在遍歷字節(jié)序列的時候, 會出現(xiàn)溢出,而GBK不會。所以,你在循環(huán)遍歷字節(jié)序列的時候把判斷條件bbuff.capacity()換成bbuff.limit()就可以了。


查看完整回答
反對 回復(fù) 2021-11-06
?
qq_花開花謝_0

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個贊

因?yàn)閑clipse默認(rèn)的是GBK,GBK和UTF-8貌似有長度上的區(qū)別

查看完整回答
反對 回復(fù) 2021-11-06
  • 2 回答
  • 0 關(guān)注
  • 588 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號