java設置字符串編碼、轉碼


Unicode(統一碼、萬國碼、單一碼)是計算機科學領域里的一項業界標准,包括字符集、編碼方案等。Unicode 是為了解決傳統的字符編碼方案的局限而產生的,它為每種語言中的每個字符設定了統一並且唯一的二進制編碼,以滿足跨語言、跨平台進行文本轉換、處理的要求。1990年開始研發,1994年正式公布。

Unicode是國際組織制定的可以容納世界上所有文字和符號的字符編碼方案。目前的Unicode字符分為17組編排,0x0000 至 0x10FFFF,每組稱為平面(Plane),而每平面擁有65536個碼位,共1114112個。然而目前只用了少數平面。 UTF-8UTF-16UTF-32都是將數字轉換到程序數據的編碼方案。
通用字符集(Universal Character Set, UCS)是由ISO制定的ISO 10646(或稱ISO/IEC 10646)標准所定義的標准字符集。UCS-2用兩個字節編碼,UCS-4用4個字節編碼。

UTF-8

UTF-8以字節為單位對Unicode進行編碼。
UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字符編碼,又稱萬國碼,由Ken Thompson於1992年創建。現在已經標准化為RFC 3629。UTF-8用1到6個字節編碼Unicode字符。用在網頁上可以統一頁面顯示中文簡體繁體及其它語言(如英文,日文,韓文)。
 

UTF-16

UTF-16編碼以16位無符號整數為單位。
UTF-16是 Unicode字符編碼五層次模型的第三層:字符編碼表(Character Encoding Form,也稱為 "storage format")的一種實現方式。即把Unicode字符集的抽象碼位映射為16位長的整數(即 碼元)的序列,用於數據存儲或傳遞。Unicode字符的碼位,需要1個或者2個16位長的碼元來表示,因此這是一個變長表示。
UTF-16是 Unicode的其中一個使用方式。  UTF是 Unicode TransferFormat,即把Unicode轉做某種格式的意思。
它定義於ISO/IEC 10646-1的附錄Q,而 RFC2781也定義了相似的做法。
在Unicode 基本多文種平面定義的 字符(無論是 拉丁字母、漢字或其他文字或符號),一律使用2 字節儲存。而在輔助平面定義的字符,會以代理對(surrogate pair)的形式,以兩個2字節的值來儲存。
UTF-16比起 UTF-8,好處在於大部分字符都以固定長度的字節 (2字節) 儲存,但UTF-16卻無法兼容於 ASCII編碼。

UTF-32

UTF-32編碼以32位無符號整數為單位。Unicode的UTF-32編碼就是其對應的32位無符號整數。
UTF-32 (或 UCS-4)是一種將Unicode 字符編碼的協定,對每一個Unicode碼位使用恰好32位元。其它的Unicode transformation formats則使用不定長度編碼。因為UTF-32對每個 字符都使用4 字節,就空間而言,是非常沒有效率的。特別地,非基本多文種平面的字符在大部分文件中通常很罕見,以致於它們通常被認為不存在占用空間大小的討論,使得UTF-32通常會是其它編碼的二到四倍。雖然每一個碼位使用固定長定的字節看似方便,它並不如其它Unicode編碼使用得 廣泛
j
 
java中編碼
 
String gbkStr = "你好哦!"; //源碼文件是GBK格式,或者這個字符串是從GBK文件中讀取出來的, 轉換為string 變成unicode格式
//利用getBytes將unicode字符串轉成UTF-8格式的字節數組
byte[] utf8Bytes = gbkStr.getBytes("UTF-8"); 
//然后用utf-8 對這個字節數組解碼成新的字符串
String utf8Str = new String(utf8Bytes, "UTF-8");
簡化后就是:
unicodeToUtf8 (String s) {
return new String( s.getBytes("utf-8") , "utf-8");
}
UTF-8 轉GBK原理也是一樣
return new String( s.getBytes("GBK") , "GBK");
 
解決編碼亂碼

java 獲取系統中默認的編碼

  //方法一:中文操作系統中打印GBK   

System.out.println(System.getProperty("file.encoding"));   

//方法二:中文操作系統中打印GBK   

System.out.println(Charset.defaultCharset());   

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM