最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中關(guān)于字符串的編碼方式

 更新時(shí)間:2022年06月21日 10:46:13   作者:想去22世紀(jì)  
這篇文章主要介紹了Java中關(guān)于字符串的編碼方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

字符串的編碼方式

UTF-8是Unicode的一種實(shí)現(xiàn)方式,也就是它的字節(jié)結(jié)構(gòu)有特殊要求,所以我們說一個(gè)漢字的范圍是0X4E00到0x9FA5,是指unicode值,至于放在utf-8的編碼里去就是由三個(gè)字節(jié)來組織,所以可以看出unicode是給出一個(gè)字符的范圍,定義了這個(gè)字是碼值是多少,至于具體的實(shí)現(xiàn)方式可以有多種多樣來實(shí)現(xiàn)。

idea中默認(rèn)的字符串編碼方式為utf-8

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

更改編碼方式:settings->fileCoding->GlobalEncoding = GBK

輸出結(jié)果:

utf-8和GBK中字符串所占用的字節(jié)數(shù)

    public static void print(String s) {
        for (byte aByte : s.getBytes()) {
            System.out.println(aByte);
        }
        System.out.println("----------------");
    }

GBK編碼方式下,鍵盤在中文狀態(tài)

數(shù)字字母占一個(gè)字節(jié),符號或者中文占用兩個(gè)字節(jié)

    public static void main(String[] args) {
        String s1 = "2";
        print(s1);
        String s2 = ";";
        print(s2);
        String s3 = "方";
        print(s3);
        String s4 = "23f方";
        print(s4);
    }

gbk編碼方式下,鍵盤在英文狀態(tài)

字母數(shù)字占,符號用1個(gè)字節(jié),中文占用兩個(gè)字節(jié)

    public static void main(String[] args) {
        String s1 = "2";
        print(s1);
        String s2 = ";";
        print(s2);
        String s3 = "f";
        print(s3);
        String s4 = "23f方";
        print(s4);
    }

utf-8的方式下

中文,中文符號占用3個(gè)字節(jié),英文符號占用1個(gè)字節(jié),字母數(shù)字占用1個(gè)字節(jié)

    public static void main(String[] args) {
        String s1 = "2";
        print(s1);
        String s2 = ";";
        print(s2);
        String s3 = "方";
        print(s3);
        String s4 = "23f方";
        print(s4);
    }

小結(jié):

  • utf-8下中文中文符號占用3字節(jié),英文符號,字母數(shù)字占用1個(gè)字節(jié)
  • gbk下中文中文符號占用2字節(jié),英文符號,字母數(shù)字占用1個(gè)字節(jié)

設(shè)置字符串編碼、轉(zhuǎn)碼 

Unicode(統(tǒng)一碼、萬國碼、單一碼)是計(jì)算機(jī)科學(xué)領(lǐng)域里的一項(xiàng)業(yè)界標(biāo)準(zhǔn),包括字符集、編碼方案等。Unicode 是為了解決傳統(tǒng)的字符編碼方案的局限而產(chǎn)生的,它為每種語言中的每個(gè)字符設(shè)定了統(tǒng)一并且唯一的二進(jìn)制編碼,以滿足跨語言、跨平臺進(jìn)行文本轉(zhuǎn)換、處理的要求。1990年開始研發(fā),1994年正式公布。

Unicode是國際組織制定的可以容納世界上所有文字和符號的字符編碼方案。目前的Unicode字符分為17組編排,0x0000 至 0x10FFFF,每組稱為平面(Plane),而每平面擁有65536個(gè)碼位,共1114112個(gè)。然而目前只用了少數(shù)平面。UTF-8、UTF-16、UTF-32都是將數(shù)字轉(zhuǎn)換到程序數(shù)據(jù)的編碼方案。

通用字符集(Universal Character Set, UCS)是由ISO制定的ISO 10646(或稱ISO/IEC 10646)標(biāo)準(zhǔn)所定義的標(biāo)準(zhǔn)字符集。UCS-2用兩個(gè)字節(jié)編碼,UCS-4用4個(gè)字節(jié)編碼。

UTF-8

UTF-8以字節(jié)為單位對Unicode進(jìn)行編碼。

UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字符編碼,又稱萬國碼,由Ken Thompson于1992年創(chuàng)建?,F(xiàn)在已經(jīng)標(biāo)準(zhǔn)化為RFC 3629。UTF-8用1到6個(gè)字節(jié)編碼Unicode字符。

用在網(wǎng)頁上可以統(tǒng)一頁面顯示中文簡體繁體及其它語言(如英文,日文,韓文)。 

UTF-16

UTF-16編碼以16位無符號整數(shù)為單位。

UTF-16是Unicode字符編碼五層次模型的第三層:字符編碼表(Character Encoding Form,也稱為 "storage format")的一種實(shí)現(xiàn)方式。即把Unicode字符集的抽象碼位映射為16位長的整數(shù)(即碼元)的序列,用于數(shù)據(jù)存儲或傳遞。Unicode字符的碼位,需要1個(gè)或者2個(gè)16位長的碼元來表示,因此這是一個(gè)變長表示。

UTF-16是Unicode的其中一個(gè)使用方式。 UTF是 Unicode TransferFormat,即把Unicode轉(zhuǎn)做某種格式的意思。

它定義于ISO/IEC 10646-1的附錄Q,而RFC2781也定義了相似的做法。

在Unicode基本多文種平面定義的字符(無論是拉丁字母、漢字或其他文字或符號),一律使用2字節(jié)儲存。而在輔助平面定義的字符,會以代理對(surrogate pair)的形式,以兩個(gè)2字節(jié)的值來儲存。UTF-16比起UTF-8,好處在于大部分字符都以固定長度的字節(jié) (2字節(jié)) 儲存,但UTF-16卻無法兼容于ASCII編碼。

UTF-32

UTF-32編碼以32位無符號整數(shù)為單位。

Unicode的UTF-32編碼就是其對應(yīng)的32位無符號整數(shù)。

UTF-32 (或 UCS-4)是一種將Unicode字符編碼的協(xié)定,對每一個(gè)Unicode碼位使用恰好32位元。其它的Unicode transformation formats則使用不定長度編碼。因?yàn)閁TF-32對每個(gè)字符都使用4字節(jié),就空間而言,是非常沒有效率的。特別地,非基本多文種平面的字符在大部分文件中通常很罕見,以致于它們通常被認(rèn)為不存在占用空間大小的討論,使得UTF-32通常會是其它編碼的二到四倍。雖然每一個(gè)碼位使用固定長定的字節(jié)看似方便,它并不如其它Unicode編碼使用得廣泛。j 

java中編碼 

String gbkStr = "你好哦!"; //源碼文件是GBK格式,或者這個(gè)字符串是從GBK文件中讀取出來的, 轉(zhuǎn)換為string 變成unicode格式
//利用getBytes將unicode字符串轉(zhuǎn)成UTF-8格式的字節(jié)數(shù)組
byte[] utf8Bytes = gbkStr.getBytes("UTF-8");?
//然后用utf-8 對這個(gè)字節(jié)數(shù)組解碼成新的字符串
String utf8Str = new String(utf8Bytes, "UTF-8");

簡化后就是:

unicodeToUtf8 (String s) {
return new String( s.getBytes("utf-8") , "utf-8");
}

UTF-8 轉(zhuǎn)GBK原理也是一樣

return new String( s.getBytes("GBK") , "GBK");

解決編碼亂碼

java 獲取系統(tǒng)中默認(rèn)的編碼

? //方法一:中文操作系統(tǒng)中打印GBK ??
System.out.println(System.getProperty("file.encoding")); ??
//方法二:中文操作系統(tǒng)中打印GBK ??
System.out.println(Charset.defaultCharset()); ??

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • MyBatis-Plus主鍵生成策略的實(shí)現(xiàn)方法

    MyBatis-Plus主鍵生成策略的實(shí)現(xiàn)方法

    MyBatis-Plus提供了多種主鍵生成策略,包括自增、UUID、Redis和雪花算法,本文就來介紹一下,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • java selenium教程環(huán)境搭建方法

    java selenium教程環(huán)境搭建方法

    本文主要介紹java selenium 環(huán)境搭建,這里詳細(xì)介紹了selenium的安裝環(huán)境搭建,有興趣的小伙伴可以參考下
    2016-08-08
  • 利用POI讀取word、Excel文件的最佳實(shí)踐教程

    利用POI讀取word、Excel文件的最佳實(shí)踐教程

    Apache POI 是用Java編寫的免費(fèi)開源的跨平臺的 Java API,Apache POI提供API給Java程式對Microsoft Office格式檔案讀和寫的功能。 下面這篇文章主要給大家介紹了關(guān)于利用POI讀取word、Excel文件的最佳實(shí)踐的相關(guān)資料,需要的朋友可以參考下。
    2017-11-11
  • Java使用異或運(yùn)算實(shí)現(xiàn)簡單的加密解密算法實(shí)例代碼

    Java使用異或運(yùn)算實(shí)現(xiàn)簡單的加密解密算法實(shí)例代碼

    這篇文章主要介紹了Java使用異或運(yùn)算實(shí)現(xiàn)簡單的加密解密算法實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • 如何配置feign全局log

    如何配置feign全局log

    這篇文章主要介紹了如何配置feign全局log,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 解決JPA?save()方法null值覆蓋掉mysql預(yù)設(shè)的默認(rèn)值問題

    解決JPA?save()方法null值覆蓋掉mysql預(yù)設(shè)的默認(rèn)值問題

    這篇文章主要介紹了解決JPA?save()方法null值覆蓋掉mysql預(yù)設(shè)的默認(rèn)值問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot如何訪問html和js等靜態(tài)資源配置

    SpringBoot如何訪問html和js等靜態(tài)資源配置

    這篇文章主要介紹了SpringBoot如何訪問html和js等靜態(tài)資源配置,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Mybatis Order by動(dòng)態(tài)參數(shù)防注入方式

    Mybatis Order by動(dòng)態(tài)參數(shù)防注入方式

    這篇文章主要介紹了Mybatis Order by動(dòng)態(tài)參數(shù)防注入方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • java使用多線程讀取超大文件

    java使用多線程讀取超大文件

    這篇文章主要為大家詳細(xì)介紹了java使用多線程讀取超大文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Java集合框架概覽之ArrayList源碼刨析

    Java集合框架概覽之ArrayList源碼刨析

    本文主要從一個(gè)簡單的代碼入手,對ArrayList?的最常用的源碼進(jìn)行刨析,文中源碼摘自?JDK1.8,源碼的注釋部分博主也加入了自己的翻譯,歡迎讀者食用
    2023-03-03

最新評論

巴林右旗| 资中县| 安远县| 曲周县| 蚌埠市| 阿图什市| 和硕县| 土默特左旗| 泾源县| 济宁市| 霍城县| 玉田县| 临夏市| 清水县| 英吉沙县| 青海省| 新安县| 罗甸县| 周宁县| 安徽省| 屯留县| 兴安县| 徐水县| 中山市| 逊克县| 文山县| 石家庄市| 尉犁县| 稷山县| 九龙县| 南京市| 宁远县| 宾川县| 沂源县| 八宿县| 新乐市| 宝山区| 齐河县| 醴陵市| 昌都县| 巧家县|