1. java中文字元所佔的位元組數是多少
採用或GBK編碼方式時,一個中文字元佔2個位元組;而採用UTF-8編碼方式時,一個中文字元會佔3個位元組。
2. Java怎麼將字元串轉換為GB2312原編碼
@Test
publicvoidtest333(){
="青白";
try{
byte[]b=a.getBytes("GB2312");
System.out.println(bytesToHexFun1(b));
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}
}
//將byte數組轉成16進制字元串
(byte[]bytes){
char[]HEX_CHAR={'0','1','2','3','4','5',
'6','7','8','9','a','b','c','d','e','f'};
//一個byte為8位,可用兩個十六進制位標識
char[]buf=newchar[bytes.length*2];
inta=0;
intindex=0;
for(byteb:bytes){//使用除與取余進行轉換
if(b<0){
a=256+b;
}else{
a=b;
}
buf[index++]=HEX_CHAR[a/16];
buf[index++]=HEX_CHAR[a%16];
}
returnnewString(buf);
}
中心思想就是先轉成GB2312的byte數組,再轉成16進制就可以了。
3. java怎麼把utf-8的字元串轉換為gb2312格式
Java中字元串轉碼,根據實際運用的環境有以下三種方式
1、使用Java.lang.String
這是最常用的方法,先用對應編碼獲取位元組,然後重新構造新編碼,示例代碼如下:
Strings="清山";
byte[]b=s.getBytes("utf-8");//編碼
Stringsa=newString(b,"gb2312");//解碼:用什麼字元集編碼就用什麼字元集解碼
2、java.io.InputStreamReader/OutputStreamWriter:橋轉換
讀寫文件的應用中,可以使用這種方式,直接在IO流構造中轉換,示例代碼如下:
InputStreamis=newFileInputStream("C:/項目進度跟蹤.txt");//文件讀取
InputStreamReaderisr=newInputStreamReader(is,"utf-8");//解碼
OutputStreamos=newFileOutputStream("C:/項目進度跟蹤_gb2312.txt");//文件輸出
OutputStreamWriterosw=newOutputStreamWriter(os,"gb2312");//開始編碼
3、java.nio.Charset
使用nio中的Charset轉換字元,示例代碼如下:
CharsetinSet=Charset.forName("utf-8");//解碼字元集
CharsetoutSet=Charset.forName("gb2312");//編碼字元集
CharsetDecoderde=inSet.newDecoder();//解碼器
CharsetEncoderen=outSet.newEncoder();//編碼
4. 為什麼java的默認編碼不是utf-8 而是gbk
因為系統是中文語言的,得到的是GBK編碼,所以肯定不是utf的。
工具:
win7
jdk
方法:
在計算機上右鍵選擇屬回性
5. JAVA幾種常見的編碼格式
學過計算機的人都知道 ASCII 碼,總共有 128 個,用一個位元組的低 7 位表示,0~31 是控制字元如換行回車刪除等;32~126 是列印字元,可以通過鍵盤輸入並且能夠顯示出來。
128 個字元顯然是不夠用的,於是 ISO 組織在 ASCII 碼基礎上又制定了一些列標准用來擴展 ASCII 編碼,它們是 ISO-8859-1~ISO-8859-15,其中 ISO-8859-1 涵蓋了大多數西歐語言字元,所有應用的最廣泛。ISO-8859-1 仍然是單位元組編碼,它總共能表示 256 個字元。
它的全稱是《信息交換用漢字編碼字元集 基本集》,它是雙位元組編碼,總的編碼范圍是 A1-F7,其中從 A1-A9 是符號區,總共包含 682 個符號,從 B0-F7 是漢字區,包含 6763 個漢字。
全稱叫《漢字內碼擴展規范》,是國家技術監督局為 windows95 所制定的新的漢字內碼規范,它的出現是為了擴展 GB2312,加入更多的漢字,它的編碼范圍是 8140~FEFE(去掉 XX7F)總共有 23940 個碼位,它能表示 21003 個漢字,它的編碼是和 GB2312 兼容的,也就是說用 GB2312 編碼的漢字可以用 GBK 來解碼,並且不會有亂碼。
全稱是《信息交換用漢字編碼字元集》,是我國的強制標准,它可能是單位元組、雙位元組或者四位元組編碼,它的編碼與 GB2312 編碼兼容,這個雖然是國家標准,但是實際應用系統中使用的並不廣泛。
UTF-16 統一採用兩個位元組表示一個字元,雖然在表示上非常簡單方便,但是也有其缺點,有很大一部分字元用一個位元組就可以表示的現在要兩個位元組表示,存儲空間放大了一倍,在現在的網路帶寬還非常有限的今天,這樣會增大網路傳輸的流量,而且也沒必要。而 UTF-8 採用了一種變長技術,每個編碼區域有不同的字碼長度。不同類型的字元可以是由 1~6 個位元組組成。
UTF-8 有以下編碼規則:
UTF-16 具體定義了 Unicode 字元在計算機中存取方法。UTF-16 用兩個位元組來表示 Unicode 轉化格式,這個是定長的表示方法,不論什麼字元都可以用兩個位元組表示,兩個位元組是 16 個 bit,所以叫 UTF-16。UTF-16 表示字元非常方便,每兩個位元組表示一個字元,這個在字元串操作時就大大簡化了操作,這也是 Java 以 UTF-16 作為內存的字元存儲格式的一個很重要的原因。
ISO 試圖想創建一個全新的超語言字典,世界上所有的語言都可以通過這本字典來相互翻譯。可想而知這個字典是多麼的復雜,關於 Unicode 的詳細規范可以參考相應文檔。Unicode 是 Java 和 XML 的基礎,下面詳細介紹 Unicode 在計算機中的存儲形式。
UTF-16
UTF-8
如果一個位元組,最高位(第 8 位)為 0,表示這是一個 ASCII 字元(00 - 7F)。可見,所有 ASCII 編碼已經是 UTF-8 了。
如果一個位元組,以 11 開頭,連續的 1 的個數暗示這個字元的位元組數,例如:110xxxxx 代表它是雙位元組 UTF-8 字元的首位元組。
如果一個位元組,以 10 開始,表示它不是首位元組,需要向前查找才能得到當前字元的首位元組
詳情傳送門至:網頁鏈接