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

Java字符串編碼知識點詳解介紹

 更新時間:2022年11月06日 15:02:07   作者:bjpowernode  
在本篇內(nèi)容了小編給大家詳細分析了關(guān)于Java字符串編碼的知識點并對實例做了分析,有興趣的朋友們跟著學習下。

在 Java 中,當我們處理String時,有時需要將字符串編碼為特定字符集。編碼是一種將數(shù)據(jù)從一種格式轉(zhuǎn)換為另一種格式的方法。字符串對象使用 UTF-16 編碼。UTF-16 的問題在于它不能被修改。只有一種方法可以用來獲得不同的編碼,即 byte[] 數(shù)組。如果我們得到意外的數(shù)據(jù),編碼的方式是不合適的。在本節(jié)中,我們將學習如何在Java中對字符串進行編碼。

在繼續(xù)本節(jié)之前,我們必須了解字符編碼。讓我們快速瀏覽一下。讓我們了解為什么我們需要對字符串進行編碼。

字符編碼是一種將文本數(shù)據(jù)轉(zhuǎn)換為二進制數(shù)的技術(shù)。我們可以為特定字符分配唯一的數(shù)值,并將這些數(shù)字轉(zhuǎn)換為二進制語言。這些二進制數(shù)稍后可以根據(jù)它們的值轉(zhuǎn)換回原始字符。

問題

假設(shè)我們有德語字符串Tschüss,需要對其進行編碼??紤]以下代碼片段:

字符串 str =  "Tschüss" ;   
字節(jié)[] bytesOfString = str.getBytes();   
String encoded_String =  new  String(bytesOfString, StandardCharsets.US_ASCII); assertNotEquals(encoded_String, str);  

如果我們使用 US_ASCII 對字符串進行編碼,它會給出Tsch?ss,因為 US_ASCII 編碼不理解非 ASCII 字符 ( ü )。當我們將 ASCII 編碼的字符串轉(zhuǎn)換為 UTF-8 時,我們得到相同的字符串。

字符串 str =  "再見" ;   
字節(jié)[] bytesOfString = str.getBytes();   
String asciiEncondedEnglishString =  new  String(bytesOfString, StandardCharsets.US_ASCII);   
assertEquals(encoded_String, str);  

如果 byte[] 數(shù)組包含非 Unicode 文本,我們可以使用String構(gòu)造函數(shù)將文本轉(zhuǎn)換為 Unicode。相反,我們也可以使用String.getBytes()方法將 String 對象轉(zhuǎn)換為非 Unicode 字符的 byte[] 數(shù)組。讓我們使用getBytes()方法對字符串進行編碼。

使用 String.getBytes() 方法

Java String類提供了getBytes() 方法,用于將字符串編碼為 UTF-8。該方法將字符串轉(zhuǎn)換為字節(jié)序列并將結(jié)果存儲到數(shù)組中。

句法:

公共字節(jié)[] getBytes(String charsetName) 拋出 UnsupportedEncodingException   

它將 charsetName 解析為參數(shù)并返回字節(jié)數(shù)組。如果不支持命名字符集,它會拋出UnsupportedEncodingException 。

讓我們創(chuàng)建一個將字符串轉(zhuǎn)換為 UTF-8 編碼的 Java 程序。

StringEncodingExample.java

公共類 StringEncodingExample    
{  
公共靜態(tài)void  main(String args[]) 拋出 異常    
{  
//要編碼的字符串      
字符串 str =  "谷歌云" ;  
//調(diào)用getBytes()方法并將一個字節(jié)數(shù)組存入array[]  
字節(jié) 數(shù)組[] = str.getBytes( "UTF8" );  
System.out.println( "編碼字符串:" );  
//增強的循環(huán)遍歷數(shù)組  
對于 (字節(jié) x:數(shù)組)   
{  
//打印字節(jié)序列      
System.out.print(x+ " " );  
}  
}  
}  

輸出:

編碼字符串:
71 111 111 103 108 101 32 67 108 111 117 100

使用 StandardCharsets 類

我們還可以使用 StandardCharset 類對字符串進行編碼。對字符串進行編碼有兩個步驟。首先,將字符串解碼為字節(jié),然后將其編碼為 UTF-8。例如,考慮以下代碼:

字符串 str =  "Tschüss" ;   
ByteBuffer 緩沖區(qū) = StandardCharsets.UTF_8.encode(str);   
String encoded_String = StandardCharsets.UTF_8.decode(buffer).toString(); assertEquals(str, encoded_String);  

知識點擴展:

為什么要編碼

不知道大家有沒有想過一個問題,那就是為什么要編碼?我們能不能不編碼?要回答這個問題必須要回到計算機是如何表示我們?nèi)祟惸軌蚶斫獾姆柕?,這些符號也就是我們?nèi)祟愂褂玫恼Z言。由于人類的語言有太多,因而表示這些語言的符號太多,無法用計算機中一個基本的存儲單元—— byte 來表示,因而必須要經(jīng)過拆分或一些翻譯工作,才能讓計算機能理解。我們可以把計算機能夠理解的語言假定為英語,其它語言要能夠在計算機中使用必須經(jīng)過一次翻譯,把它翻譯成英語。這個翻譯的過程就是編碼。所以可以想象只要不是說英語的國家要能夠使用計算機就必須要經(jīng)過編碼。這看起來有些霸道,但是這就是現(xiàn)狀,這也和我們國家現(xiàn)在在大力推廣漢語一樣,希望其它國家都會說漢語,以后其它的語言都翻譯成漢語,我們可以把計算機中存儲信息的最小單位改成漢字,這樣我們就不存在編碼問題了。

所以總的來說,編碼的原因可以總結(jié)為:

  • 計算機中存儲信息的最小單元是一個字節(jié)即 8 個 bit,所以能表示的字符范圍是 0~255 個
  • 人類要表示的符號太多,無法用一個字節(jié)來完全表示,要解決這個矛盾必須需要一個新的數(shù)據(jù)結(jié)構(gòu) char,從 char 到 byte 必須編碼

到此這篇關(guān)于Java字符串編碼知識點詳解介紹的文章就介紹到這了,更多相關(guān)Java字符串編碼的介紹內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot jdbctemplate如何實現(xiàn)多數(shù)據(jù)源

    springboot jdbctemplate如何實現(xiàn)多數(shù)據(jù)源

    這篇文章主要介紹了springboot jdbctemplate如何實現(xiàn)多數(shù)據(jù)源問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 深入解析java中的值傳遞和引用傳遞

    深入解析java中的值傳遞和引用傳遞

    這篇文章主要介紹了深入解析java中的值傳遞和引用傳遞,值傳遞是將變量的值復(fù)制給另一個變量,兩個變量之間并沒有直接關(guān)系,引用傳遞是將變量的引用(內(nèi)存地址)傳遞給另一個變量,兩個變量之間指向同一個內(nèi)存地址,修改一個變量的值也會影響到另一個變量
    2023-07-07
  • mybatis新增到數(shù)據(jù)庫后返回當前ID問題

    mybatis新增到數(shù)據(jù)庫后返回當前ID問題

    這篇文章主要介紹了mybatis新增到數(shù)據(jù)庫后返回當前ID問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • java 重載(overload)與重寫(override)詳解及實例

    java 重載(overload)與重寫(override)詳解及實例

    這篇文章主要介紹了java 重載(overload)與重寫(override)詳解及實例的相關(guān)資料,并附實例代碼,需要的朋友可以參考下
    2016-10-10
  • 關(guān)于MVC設(shè)計模式及流程解析

    關(guān)于MVC設(shè)計模式及流程解析

    這篇文章主要介紹了關(guān)于MVC設(shè)計模式及流程解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java抽象定義以及舉例代碼

    Java抽象定義以及舉例代碼

    這篇文章主要給大家介紹了關(guān)于Java抽象定義以及舉例的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Java使用Hutool實現(xiàn)AES、DES加密解密的方法

    Java使用Hutool實現(xiàn)AES、DES加密解密的方法

    本篇文章主要介紹了Java使用Hutool實現(xiàn)AES、DES加密解密的方法,具有一定的參考價值,有興趣的可以了解一下
    2017-08-08
  • 詳解Java MyBatis 插入數(shù)據(jù)庫返回主鍵

    詳解Java MyBatis 插入數(shù)據(jù)庫返回主鍵

    這篇文章主要介紹了詳解Java MyBatis 插入數(shù)據(jù)庫返回主鍵,有興趣的可以了解一下。
    2017-01-01
  • 基于SpringBoot + Redis實現(xiàn)密碼暴力破解防護

    基于SpringBoot + Redis實現(xiàn)密碼暴力破解防護

    在現(xiàn)代應(yīng)用程序中,保護用戶密碼的安全性是至關(guān)重要的,密碼暴力破解是指通過嘗試多個密碼組合來非法獲取用戶賬戶的密碼,為了保護用戶密碼不被暴力破解,我們可以使用Spring Boot和Redis來實現(xiàn)一些防護措施,本文將介紹如何利用這些技術(shù)來防止密碼暴力破解攻擊
    2023-06-06
  • java并發(fā)學習-CountDownLatch實現(xiàn)原理全面講解

    java并發(fā)學習-CountDownLatch實現(xiàn)原理全面講解

    這篇文章主要介紹了java并發(fā)學習-CountDownLatch實現(xiàn)原理全面講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論

克什克腾旗| 屯门区| 宜丰县| 丽水市| 榆林市| 邵东县| 呈贡县| 麻城市| 绥宁县| 益阳市| 印江| 依兰县| 康平县| 上饶县| 通辽市| 抚远县| 固始县| 武夷山市| 镇原县| 西昌市| 湄潭县| 河北区| 宿迁市| 孙吴县| 耒阳市| 阿克苏市| 南阳市| 镶黄旗| 绥芬河市| 汨罗市| 婺源县| 南漳县| 陕西省| 龙南县| 怀集县| 利川市| 福泉市| 海南省| 仁布县| 九龙县| 南投县|