導航:首頁 > 編程語言 > java字元串轉碼gbk

java字元串轉碼gbk

發布時間:2025-09-17 09:12:19

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();//編碼

⑵ 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進制就可以了。

⑶ Java中如何將gbk裝換為ansi

對於java,在字元集間進行轉換時比較常用的功能,尤其在web應用中。
首先我們要先了解一些知識點:
一、關鍵技術點:
1、當前流行的字元編碼格式有:US-ASCII、ISO-8859-1、UTF-8、UTF-16BE、UTF-16LE、UTF-16、GBK、GB2312等,其中GBK、GB2312是專門處理中文編碼的。
2、String的getBytes方法用於按指定編碼獲取字元串的位元組數組,參數指定了解碼格式,如果沒有指定解碼格式,則按系統默認編碼格式。
3、String的「String(bytes[] bs, String charset)」構造方法用於把位元組數組按指定的格式組合成一個字元串對象
二、下面是一個完整的例子,包括了你提問中的gbk轉ascii,同時也提供了一些其他字元集間的轉碼方式,可留存備查:
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 轉換格式,Litter 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";

public static final String GB2312 = "GB2312";

/** 將字元編碼轉換成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);
}

/** 將字元編碼轉換成GB2312 */
public String toGB2312(String str) throws UnsupportedEncodingException {
return this.changeCharset(str,GB2312);
}

/**
* 字元串編碼轉換的實現方法
* @param str 待轉換的字元串
* @param newCharset 目標編碼
*/
public String changeCharset(String str, String newCharset) throws UnsupportedEncodingException {
if(str != null) {
//用默認字元編碼解碼字元串。與系統相關,中文windows默認為GB2312
byte[] bs = str.getBytes();
return new String(bs, newCharset); //用新的字元編碼生成字元串
}
return null;
}

/**
* 字元串編碼轉換的實現方法
* @param str 待轉換的字元串
* @param oldCharset 源字元集
* @param newCharset 目標字元集
*/
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);
System.out.println();

String iso88591 = test.toISO_8859_1(str);
System.out.println("轉換成ISO-8859-1碼:" + iso88591);
System.out.println();

gbk = test.changeCharset(iso88591, ISO_8859_1, GBK);
System.out.println("再把ISO-8859-1碼的字元串轉換成GBK碼:" + gbk);
System.out.println();

String utf8 = test.toUTF_8(str);
System.out.println();
System.out.println("轉換成UTF-8碼:" + utf8);
String utf16be = test.toUTF_16BE(str);
System.out.println("轉換成UTF-16BE碼:" + utf16be);
gbk = test.changeCharset(utf16be, UTF_16BE, 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, UTF_16LE, GBK);
System.out.println("再把UTF-16LE編碼的字元串轉換成GBK碼:" + gbk);
System.out.println();

String utf16 = test.toUTF_16(str);
System.out.println("轉換成UTF-16碼:" + utf16);
String gb2312 = test.changeCharset(utf16, UTF_16, GB2312);
System.out.println("再把UTF-16編碼的字元串轉換成GB2312碼:" + gb2312);
}

}

⑷ java怎樣實現將GB2312編碼的字元串轉換為ISO-8859-1編碼的字元串

通過JDK1.6知道String類中getBytes(」編碼「)方法可以講一個數用指定的編碼轉成一個位元組數組,String中通過指定的 charset解碼指定的 byte 數組,構造一個新的String。代碼如下:

try{

String s = "java學習";

System.out.println(s);

String result = new String(s.getBytes("GB2312"),"iso-8859-1");

System.out.println(s);

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

(4)java字元串轉碼gbk擴展閱讀:

getBytes() 方法有兩種形式:

1、getBytes(String charsetName):使用指定的字元集將字元串編碼為 byte 序列,並將結果存儲到一個新的 byte 數組中。

2、getBytes():使用平台的默認字元集將字元串編碼為 byte 序列,並將結果存儲到一個新的 byte 數組中。

參考資料:

網路-getBytes()

⑸ java中UTF-8轉GBK為什麼不會出現中文亂碼

Java中UTF-8轉GBK之所以不會出復現中文亂碼,是因制為UTF-8編碼為兼容性最大的字元集編碼,它本身就支持中文字元。

Java代碼轉碼範例:
String s = new String(ss.getBytes(),"GBK");
當你的內容本來就是正常的中文字元時,通過上面的語句轉為GBK編碼是不會有任何問題的,但如果你在轉碼之前的字元不是正確的中文字元,或者不是支持中文字元的字元集,那可能就會出現亂碼問題。

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

在Java開發中,特別是web開發,亂碼是一種很常見而且很頭疼的問題,這常常是由於頁面端、服務端、資料庫等幾處所使用的字元不一致所致,故開發中,保持編碼一致, 往往能減少由於亂碼而帶來的時間浪費,是一件非常重要的事情。

⑹ java如何把string轉為utf-8

java不同編碼之間進行轉換,都需要使用unicode作為中轉。

String str = "任意字元串";

str = new String(str.getBytes("gbk"),"utf-8");

備注說明:

str.getBytes("UTF-8"); 意思是以UTF-8的編碼取得位元組

new String(XXX,"UTF-8"); 意思是以UTF-8的編碼生成字元串

舉例:

public static String getUTF8XMLString(String xml) {

// A StringBuffer Object

StringBuffer sb = new StringBuffer();

sb.append(xml);

String xmString = "";

String xmlUTF8="";

try {

xmString = new String(sb.toString().getBytes("UTF-8"));

xmlUTF8 = URLEncoder.encode(xmString, "UTF-8");

System.out.println("utf-8 編碼:" + xmlUTF8) ;

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

// return to String Formed

return xmlUTF8;

(6)java字元串轉碼gbk擴展閱讀:

UTF-8編碼規則:

如果只有一個位元組則其最高二進制位為0;如果是多位元組,其第一個位元組從最高位開始,連續的二進制位值為1的個數決定了其編碼的位元組數,其餘各位元組均以10開頭。

實際表示ASCII字元的UNICODE字元,將會編碼成1個位元組,並且UTF-8表示與ASCII字元表示是一樣的。所有其他的UNICODE字元轉化成UTF-8將需要至少2個位元組。每個位元組由一個換碼序列開始。第一個位元組由唯一的換碼序列,由n位連續的1加一位0組成,首位元組連續的1的個數表示字元編碼所需的位元組數。

Unicode轉換為UTF-8時,可以將Unicode二進制從低位往高位取出二進制數字,每次取6位,如上述的二進制就可以分別取出為如下示例所示的格式,前面按格式填補,不足8位用0填補。

⑺ java中文亂碼,能說下string.getBytes()和new String()轉碼是,具體點。

1、Java中,【String.getBytes(String decode)】的方法,會根據指定的decode,編碼返回某字元串在該編碼下的byte數組表示,例如:

byte[] b_gbk = "中".getBytes("GBK");
byte[] b_utf8 = "中".getBytes("UTF-8");
byte[] b_iso88591 = "中".getBytes("ISO8859-1")

上面三行代碼表示:分別返回「中」這個漢字在GBK、UTF-8和ISO8859-1編碼下的byte數組表示,此時b_gbk的長度為2,b_utf8的長度為3,b_iso88591的長度為1。

2、而通過【new String(byte[], decode)】的方式來還原這個「中」字時,實際是使用decode指定的編碼來將byte[ ]解析成字元串,例如:

String s_gbk = new String(b_gbk,"GBK");
String s_utf8 = new String(b_utf8,"UTF-8");
String s_iso88591 = new String(b_iso88591,"ISO8859-1");

s_gbk和s_utf8都是「中」,而只有s_iso88591是一個不認識 的字元,因為ISO8859-1編碼的編碼表中,根本就沒有包含漢字字元,當然也就無法通過"中".getBytes("ISO8859-1")。

因此,通過【String.getBytes(String decode)】方法來得到byte[ ]時,要確定decode的編碼表中確實存在String表示的碼值,這樣得到的byte[ ]數組才能正確被還原。

(7)java字元串轉碼gbk擴展閱讀

java中文編碼避免亂碼

1、為了讓中文字元適應某些特殊要求(如http header頭要求其內容必須為iso8859-1編碼),可能會通過將中文字元按照位元組方式來編碼的情況,比如:

String s_iso88591 = new String("中".getBytes("UTF-8"),"ISO8859-1")

2、上述例子中的s_iso8859-1字元串實際是三個在 ISO8859-1中的字元,在將這些字元傳遞到目的地後,目的地程序再通過相反的方式:

String s_utf8 = new String(s_iso88591.getBytes("ISO8859-1"),"UTF-8")

來得到正確的中文漢字。這樣就既保證了遵守協 議規定、也支持中文。

3、String.getBytes(String decode)方法會根據指定的decode編碼返回某字元串在該編碼下的byte數組表示這里是encode ,not decode,從字元串到位元組數組是編碼的過程,從位元組數組到字元串(即 new String(byte[] , charsetname))才是解碼的過程。

閱讀全文

與java字元串轉碼gbk相關的資料

熱點內容
vbnet讀取xlsx文件 瀏覽:257
word2003公式編號右對齊 瀏覽:223
word文件夾怎麼樣可以全選 瀏覽:658
在大一編程跟不上怎麼辦 瀏覽:742
coreldraw文件如何導入3dmax 瀏覽:150
招標文件如何用word做密封頁 瀏覽:44
如何在c51中調用匯編程序 瀏覽:824
java字元串轉碼gbk 瀏覽:983
win怎麼打開隱藏文件夾選項 瀏覽:454
榮耀手機qq接收文件在哪個文件夾 瀏覽:708
messagebox的頭文件 瀏覽:100
java啟動線程處理 瀏覽:622
騰迅收藏的表情在哪個文件夾 瀏覽:388
為什麼excel的文件是word打開的 瀏覽:781
紅頭文件字體格式word 瀏覽:443
iis字體配置文件 瀏覽:285
少兒編程導師是做什麼的 瀏覽:593
當前的網路安全防禦技術有哪些 瀏覽:655
win如何重置用戶配置文件 瀏覽:178
java獲取cpu編號 瀏覽:960

友情鏈接