java編碼解碼,語言編碼解碼

本文目錄一覽:

java里關於String的編碼與解碼

public

byte[]

getBytes(String

charsetName)

使用指定的字符集將此String編碼為byte序列,結果存在一個byte數組中

public

String(byte[]

bytes,

String

charsetName)

通過使用指定的

charset

解碼指定的

byte

數組,構造一個新的

String。

在網路傳輸中,信息都是以位元組序列的方式傳輸的。所以,發送方的String要按照某種編碼方式(如UTF-8,GBK)編碼為位元組序列,在網路中傳輸後,接收方取得這個位元組序列,按照相同的編碼方式將位元組序列解碼為String。

請看下面的代碼片段:

String

name

=

“張三”;

byte[]

b1

=

name.getBytes(“UTF-8”);

String

name1

=

new

String(b1,

“UTF-8”);

//編碼解碼相同,正常顯示

System.out.println(name1);

String

name2

=

new

String(b1,

“GBK”);

//編碼解碼不同,亂碼

System.out.println(name2);

byte[]

b2

=

name.getBytes(“GBK”);

String

name3

=

new

String(b2,

“GBK”);

//編碼解碼相同,正常顯示

System.out.println(name3);

String

name4

=

new

String(b2,

“UTF-8”);

//編碼解碼不同,亂碼

System.out.println(name4);

至於你的那個情況,要先用gbk編碼,然後再用utf-8解碼才能獲得正常的字元串,我估計是因為

1.傳輸過來的位元組碼是用utf-8編碼的,假設位元組碼為b。

2.你獲得的那個字元串,假設為s,是用gbk對b進行解碼獲得的字元串,所以是亂碼。

3.你使用gbk對s進行編碼,用gbk解碼之後再編碼,於是獲得了原來的b。

4.你使用utf-8解碼,所以獲得了正常的字元串。

簡單的說:

b

(gbk解碼)

亂碼

[此處開始是你做的](gbk編碼)

b

(utf-8解碼)

正常字元串

研究完編碼收穫會不小的,對以後理解Java的輸入輸出(尤其是網路通信和文件讀寫)都很有幫助。

java後台怎麼解決編碼問題

不用實現和繼承,自己封裝就可以了,想要什麼轉換自己對應封裝方法就可以了,這樣自己用起來也方便點。再往上找了個例子,你看看希望能幫到你!public class ChangeCharset {

/** 7位ASCII字元,也叫作ISO646-US、Unicode字符集的基本拉丁塊 */

public static final String US_ASCII = “US-ASCII”;

/** ISO 拉丁字母表 No.1,也叫作 ISO-LATIN-1 */

public static final String ISO_8859_1 = “ISO-8859-1”;

/** 8 位 UCS 轉換格式 */

public static final String UTF_8 = “UTF-8”;

/** 16 位 UCS 轉換格式,Big Endian(最低地址存放高位位元組)位元組順序 */

public static final String UTF_16BE = “UTF-16BE”;

/** 16 位 UCS 轉換格式,Little-endian(最高地址存放低位位元組)位元組順序 */

public static final String UTF_16LE = “UTF-16LE”;

/** 16 位 UCS 轉換格式,位元組順序由可選的位元組順序標記來標識 */

public static final String UTF_16 = “UTF-16”;

/** 中文超大字符集 */

public static final String GBK = “GBK”;

/**

* 將字元編碼轉換成US-ASCII碼

*/

public String toASCII(String str) throws UnsupportedEncodingException {

return this.changeCharset(str, US_ASCII);

}

/**

* 將字元編碼轉換成ISO-8859-1碼

*/

public String toISO_8859_1(String str) throws UnsupportedEncodingException {

return this.changeCharset(str, ISO_8859_1);

}

/**

* 將字元編碼轉換成UTF-8碼

*/

public String toUTF_8(String str) throws UnsupportedEncodingException {

return this.changeCharset(str, UTF_8);

}

/**

* 將字元編碼轉換成UTF-16BE碼

*/

public String toUTF_16BE(String str) throws UnsupportedEncodingException {

return this.changeCharset(str, UTF_16BE);

}

/**

* 將字元編碼轉換成UTF-16LE碼

*/

public String toUTF_16LE(String str) throws UnsupportedEncodingException {

return this.changeCharset(str, UTF_16LE);

}

/**

* 將字元編碼轉換成UTF-16碼

*/

public String toUTF_16(String str) throws UnsupportedEncodingException {

return this.changeCharset(str, UTF_16);

}

/**

* 將字元編碼轉換成GBK碼

*/

public String toGBK(String str) throws UnsupportedEncodingException {

return this.changeCharset(str, GBK);

}

/**

* 字元串編碼轉換的實現方法

*

* @param str

* 待轉換編碼的字元串

* @param newCharset

* 目標編碼

* @return

* @throws UnsupportedEncodingException

*/

public String changeCharset(String str, String newCharset)

throws UnsupportedEncodingException {

if (str != null) {

// 用默認字元編碼解碼字元串。

byte[] bs = str.getBytes();

// 用新的字元編碼生成字元串

return new String(bs, newCharset);

}

return null;

}

/**

* 字元串編碼轉換的實現方法

*

* @param str

* 待轉換編碼的字元串

* @param oldCharset

* 原編碼

* @param newCharset

* 目標編碼

* @return

* @throws UnsupportedEncodingException

*/

public String changeCharset(String str, String oldCharset, String newCharset)

throws UnsupportedEncodingException {

if (str != null) {

// 用舊的字元編碼解碼字元串。解碼可能會出現異常。

byte[] bs = str.getBytes(oldCharset);

// 用新的字元編碼生成字元串

return new String(bs, newCharset);

}

return null;

}

public static void main(String[] args) throws UnsupportedEncodingException {

ChangeCharset test = new ChangeCharset();

String str = “This is a 中文的 String!”;

System.out.println(“str: ” + str);

String gbk = test.toGBK(str);

System.out.println(“轉換成GBK碼: ” + gbk);

System.out.println();

String ascii = test.toASCII(str);

System.out.println(“轉換成US-ASCII碼: ” + ascii);

gbk = test.changeCharset(ascii, ChangeCharset.US_ASCII,

ChangeCharset.GBK);

System.out.println(“再把ASCII碼的字元串轉換成GBK碼: ” + gbk);

System.out.println();

String iso88591 = test.toISO_8859_1(str);

System.out.println(“轉換成ISO-8859-1碼: ” + iso88591);

gbk = test.changeCharset(iso88591, ChangeCharset.ISO_8859_1,

ChangeCharset.GBK);

System.out.println(“再把ISO-8859-1碼的字元串轉換成GBK碼: ” + gbk);

System.out.println();

String utf8 = test.toUTF_8(str);

System.out.println(“轉換成UTF-8碼: ” + utf8);

gbk = test.changeCharset(utf8, ChangeCharset.UTF_8, ChangeCharset.GBK);

System.out.println(“再把UTF-8碼的字元串轉換成GBK碼: ” + gbk);

System.out.println();

String utf16be = test.toUTF_16BE(str);

System.out.println(“轉換成UTF-16BE碼:” + utf16be);

gbk = test.changeCharset(utf16be, ChangeCharset.UTF_16BE,

ChangeCharset.GBK);

System.out.println(“再把UTF-16BE碼的字元串轉換成GBK碼: ” + gbk);

System.out.println();

String utf16le = test.toUTF_16LE(str);

System.out.println(“轉換成UTF-16LE碼:” + utf16le);

gbk = test.changeCharset(utf16le, ChangeCharset.UTF_16LE,

ChangeCharset.GBK);

System.out.println(“再把UTF-16LE碼的字元串轉換成GBK碼: ” + gbk);

System.out.println();

String utf16 = test.toUTF_16(str);

System.out.println(“轉換成UTF-16碼:” + utf16);

gbk = test.changeCharset(utf16, ChangeCharset.UTF_16LE,

ChangeCharset.GBK);

System.out.println(“再把UTF-16碼的字元串轉換成GBK碼: ” + gbk);

String s = new String(“中文”.getBytes(“UTF-8”), “UTF-8”);

System.out.println(s);

}

}

在Java中如何進行BASE64編碼和解碼

import sun.misc.BASE64Encoder; 

import sun.misc.BASE64Decoder; 

// 將 s 進行 BASE64 編碼 

public static String getBASE64(String s) { 

if (s == null) return null; 

return (new sun.misc.BASE64Encoder()).encode( s.getBytes() ); 

// 將 BASE64 編碼的字元串 s 進行解碼 

public static String getFromBASE64(String s) { 

if (s == null) return null; 

BASE64Decoder decoder = new BASE64Decoder(); 

try { 

byte[] b = decoder.decodeBuffer(s); 

return new String(b); 

} catch (Exception e) { 

return null; 

}

原創文章,作者:KBBY,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/143099.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
KBBY的頭像KBBY
上一篇 2024-10-14 18:45
下一篇 2024-10-14 18:45

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29

發表回復

登錄後才能評論