導航:首頁 > 編程語言 > javastringgbk編碼

javastringgbk編碼

發布時間:2023-03-28 22:10:22

java中如何得到輸入的漢字的GBK編碼

/*
*Tochangethislicenseheader,.
*Tochangethistemplatefile,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packagecn.timecd.gyhhy.mscup;

importjava.io.UnsupportedEncodingException;
importjava.nio.charset.Charset;
importjava.util.Arrays;
importjava.util.logging.Level;
importjava.util.logging.Logger;

/**
*主要涉及到String類的getBytes方法
*@author32798
*/
publicclassTest{
publicstaticvoidmain(String[]args){
//預定義常量
Stringcharset="gbk";//編碼

//請注意,找不到編碼集的時候,下面這句代碼會拋出
//java.nio.charset.UnsupportedCharsetException
Charsetcharset$=Charset.forName(charset);//獲取編碼集
//只是閱讀:兩個變數名字比較,請注意區分
//charset
//charset$

//從string轉bytes
Stringstr="這是一個測試文本";
try{
//方法一:直接通過編碼集的名字轉碼
//需要try-catch
//當字元集找不到時會拋出java.io.UnsupportedEncodingException
System.out.println(Arrays.toString(str.getBytes(charset)));
}catch(){
Logger.getLogger(Test.class.getName()).log(Level.SEVERE,null,ex);
}
//方法二:通過編碼集(java.nio.charset.Charset)轉碼
//不需要try-catch
System.err.println(Arrays.toString(str.getBytes(charset$)));
try{
Thread.sleep(200);//只是為了讓ide能按順序輸出
}catch(InterruptedExceptionex){}

//從bytes轉string
//byte[]bytes={-78,-35,-60,-32,-62,-19};
byte[]bytes=str.getBytes(charset$);//只是為了獲取測試文本的gbk碼
System.out.print(" ");//隔出3行,免得跟之前的輸出混淆
try{
//方法一:通過編碼集名字新建一個string
//需要try-catch
//當字元集找不到時會拋出java.io.UnsupportedEncodingException
System.out.println(newString(bytes,charset));
}catch(){
Logger.getLogger(Test.class.getName()).log(Level.SEVERE,null,ex);
}
//方法二:直接通過字元集新建一個string
System.err.println(newString(bytes,charset$));
}
}

Ⅱ java String gbk編碼和c# String gbk 編碼難道不一樣

您好,提問者:
確實是不一樣的,這個時候給你一種也可用於.net對接的加密

/**
*加密方法
*@paramstr
*@return
*/
publicstaticStringencode(Stringstr){
//根據默認編乎賣碼獲取位元組數組
byte[]bytes=str.getBytes();
StringBuildersb=newStringBuilder(bytes.length*2);
//將位元組數組中每個位元組拆解成2位16進制整數
for(inti=0;i<bytes.length;i++){
sb.append(hexString.charAt((bytes[i]&0xf0)>>4));
sb.append(hexString.charAt((bytes[i]&0x0f)>>0));
}
returnsb.toString();
}

/**
*得到16進制的GBK編碼,轉換為漢字
*@paramhexStr
*@return
*/
publicstaticStringdecode(StringhexStr){
if(null==hexStr||"".equals(hexStr)||(hexStr.length())%2!=0){
returnnull;
}
intbyteLength=hexStr.length()/2;
byte[]bytes=newbyte[byteLength];
inttemp=0;
for(inti=0;i<byteLength;i++){
temp=hex2Dec(hexStr.charAt(2*i))*16+hex2Dec(hexStr.charAt(2*i+1));
bytes[i]=(byte)(temp<128?temp:temp-256);
}
returnnewString(bytes);
}
privatestaticStringhexString="0123456789ABCDEF";
privatestaticinthex2Dec(charch){
if(ch=='0')
return0;
if(ch=='1')
return1;
if(ch=='2')
return2;
if(ch=='3')
return3;
if(ch=='4')
return4;
if(ch=='5')
return5;
if(ch=='6')
return6;
if(ch=='7')
return7;
if(ch=='8')
return8;
if(ch=='9')
return9;
if(ch=='a')
return10;
if(ch=='A')
return10;
if(ch=='B')
return11;
if(ch=='b')
return11;
if(ch=='C'滾納)
return12;
if(ch=='c')
return12;
if(ch=='D')
return13;
if(ch=='d')
return13;
if(ch=='E'歲備逗)
return14;
if(ch=='e')
return14;
if(ch=='F')
return15;
if(ch=='f')
return15;
elsereturn-1;
}

Ⅲ java中GBK編碼格式轉成UTF8,用一段方法實現怎麼做

GBK編碼是一個中文2個位元組寬檔,而UTF-8編碼是一個中文3個位元組,當我們調用getBytes("UTF-8")方法時,會通過計算來增加位元組。正常的情況下是型配兩個兩個的轉化,但是當位元組是奇數時最後1個位元組轉字元就會計算錯誤,然後直接賦予最後這個字元為?。所以我們需要創建ISO-8859-1編碼的字元串,保證一個輸入只有一個輸出。

import java.io.UnsupportedEncodingException;

public class new_122 {
public static void main(String[] args) throws UnsupportedEncodingException {
String gbk ="我來了";

String iso = new String(gbk.getBytes("UTF-8"),"ISO-8859-1");
System.out.println(new String(iso.getBytes("ISO-8859-1"),"慎租亂UTF-8"));
}

}

Ⅳ java中GBK編碼格式轉成UTF8,用一段方法實現怎麼做

java中GBK編碼格式轉成UTF8編碼格式的方法如下:

publicstaticvoidmain(String[]args)throwsThrowable{
StringerrStr="errStr";
System.out.println(recover(errStr));
}
publicstaticStringrecover(Stringstr)throwsThrowable{
returnnewString(str.getBytes("GBK"),"UTF-8");
}

其中errStr就是亂碼字元串,按照相反的順序在編碼蘆喊(用gbk)、解碼(用utf-8)回去,就能得到正確的字元串.
GBK、UTF-8是一種「編碼格式」,是用來序列化或存儲「編號(數字含族)」的一種「格式」;GBK和UTF-8都是用來序列化或存儲unicode編碼的數據的,但是分別是2種不同的格式; 除了格式不一樣之外,所關談嘩弊心的unicode編碼范圍也不一樣,utf-8考慮了很多種不同國家的字元,涵蓋整個unicode碼表,所以其存儲一個字元的編碼的時候,使用的位元組長度也從1位元組到4位元組不等;而GBK只考慮中文——在unicode中的一小部分——的字元,的編碼,所以算好了只要2個位元組就能涵蓋到絕大多數常用中文(2個位元組能表示6w多種字元),所以存儲一個字元的時候,所用的位元組長度是固定的;

Ⅳ java中GBK編碼格式轉成UTF8,用一段方法實現怎麼做

首先明確幾點:
unicode是一種「編碼」,所謂編碼就是一個編號(數字)到字元的一種映射關系,就僅僅是一種一對一的映射而已,可以理解成一個很大的對應表格
GBK、
UTF-8是一種「編碼格式」,是用來序列化或存儲1中提到的那個「編號(數字)」的一種「格式」;GBK和UTF-8都是用來序列化或存儲
unicode編碼的數據的,但是分別是2種不同的格式;
他們倆除了格式不一樣之外,他們所關心的unicode編碼范圍也不一樣,utf-8考慮了很多種不同國家的字元,涵蓋整個unicode碼表,所以其存
儲一個字元的編碼的時候,使用的位元組長度也從1位元組到4位元組不等;而GBK只考慮中文——在unicode中的一小部分——的字元,的編碼耐陵悉,所以它算好了
只要2個位元組就能涵蓋到絕大多數常用中文(2個位元組能表示6w多種字元),所以它存儲一個字元的時候,所用的位元組長度是固定的;
上述2個概念不懂的請馬上google,下面不再贅述;我下面說說這個問題本身...的問題在哪裡

先java的string使用的編碼是unicode,但是,當string存在於內存中時(也就是當程序運行時、你在代碼中用string類型的引用對
它進行操作時、也就是string沒有被存在文件中且也沒有在網路中傳輸(序列化)時),是「只有編碼而沒有編碼格式的」,所以java程序中的任何
String對象,說它是gbk還是utf-8都是錯的,gbk和utf-8是編碼格式而不是編碼,String在內存中不需要「編碼格式」(記住編碼格
式是在存文件或序列化的時候使用的), 它只是一個unicode的字元串而已
所以java裡面String是不帶編碼格式的,而
String.toByteArray(charsetName)得到的byteArray是帶編碼格式的,格式就是你傳入的
'charsetName',我們不妨把toByteArray的這個過程叫做「編碼」;另外,new String(byte[],
charsetName)是把一個byte數組(帶編碼格式)以charsetName指定的編碼格式翻譯為一個不帶編碼格式的String對象,我們不
妨把這個過程叫「解碼」
那麼根據我揣測提問者的意圖,可能有2種問昌乎法是他真正想問的:
第一,如何汪臘把一個被錯誤地當作是gbk格式存儲的utf-8格式的文件裡面讀出來的一段亂碼字元串還原回去(也就是說本來二進制數據是utf-8的,你用gbk來解碼它,得到的字元串是亂碼,現在想要還原回去)
第二種,如何把一個gbk文件轉化為utf-8文件
如果是第一種意圖那就:
public static void main(String... args) throws Throwable {
String errStr = "errStr";
System.out.println(recover(errStr));
}

public static String recover(String str) throws Throwable {
return new String(str.getBytes("GBK"), "UTF-8");
}
其中errStr就是亂碼字元串,按照相反的順序在編碼(用gbk)、解碼(用utf-8)回去,就能得到正確的字元串(其實不保證所有情況均能正確還原,只能說大部分都能,要看你在亂碼過程中是否有數據被丟失)

如果是第二種意圖,那就用InputStream以gbk格式將文件讀到內存里(表示為String),再將這個String以UTF-8編碼寫入目標文件里,具體請參考InputStream/OutputStream的api

Ⅵ 在java中gbk怎麼轉utf8編碼

java中,編碼是位元組轉字元的伍寬時候產生的不同映射造成的差異。那我們就可以利用這一點實現。例如,我們有一個gbk編碼格式的字元串,那我們先把它的位元組得到。
String s = "腔爛亮abc";
byte[] b = s.getBytes();
再將其轉為需要的編碼格式歷讓。如utf-8
String newStr = new String(b,"utf-8")
binggo~!!

Ⅶ java 怎麼gbk轉碼utf-8

方法一:

思路:先轉為Unicode,然後轉為GBK
Stringutf8=newString(t.getBytes("UTF-8"));
System.out.println(utf8);
Stringunicode=newString(utf8.getBytes(),"UTF-8");
System.out.println(unicode);
Stringgbk=newString(unicode.getBytes("GBK"));

System.out.println(gbk);

方法二:

publicstaticvoidmain(String[]args){
Stringstr="字元串編碼轉換";
try{
byte[]temp=str.getBytes("utf-8");//這里寫原編碼方式
byte[]newtemp=newString(temp,"utf-8").getBytes("gbk");//這里寫轉換後的編碼方式
StringnewStr=newString(newtemp,"gbk");//這里寫轉換後的編碼方式
System.out.println(newStr);
}catch(UnsupportedEncodingExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}

Ⅷ 為什麼java的默認編碼不是utf-8 而是gbk

因為系統是中文語言的,得到的是GBK編碼,所以肯定不是utf的。

工具:

win7

jdk

方法:

  1. 在計算機上右鍵選擇屬性

Ⅸ Java中如何把GBK編碼的字元串轉成utf-8編碼

我先解釋一下我對你的問題的理解

你的問題有點籠統
可以這么理解兩個意思


,你是想吧一個gbk編碼的字元串用utf-8格式來編碼
String
s
=
new
String
("全國".getBytes("GBK"),"GBK");
雖然這個時候的s是GBK編碼的
但是s還是中文字元的
所以
上面這位同胞用
new(s.getBytes("GBK"),"UTF-8")的方式肯定是錯的
應該用
String
s1
=
new
String
(s.getBytes("UTF-8"),"UTF-8")
這樣s1就是UTF-8編碼的字元串了
二,如果是遇見亂碼問題
比如
String
s
=
new
String
("全國".getBytes("GBK"),"GBK");
這樣的s就是gbk編碼的
現在你要把GBK格式的編碼用UTF-8去編碼
肯定就會出現亂碼
String
s2
=
new
String(s.getBytes("GBK"),"UTF-8");
這個s2肯定是亂碼的
而且這樣就根本解不出來了
系統出現的亂碼顯示的時候才會出現編碼錯誤
所以
一般出現亂碼
只要把輸入流換個編碼解析一下就ok了
還有什麼不明白
可以問我

Ⅹ java里關於String的編碼與解碼

從語言編碼的角度,getBytes(charset)不是解碼、也不是編碼,是轉換。API 說的是針對數據的角度。把一個整體的String分解成byte[]了。

byte[] b2=s.getBytes("gbk");
String ss=new String(b2,"utf-8");

從GBK轉換成UTF-8。

UTF8包含更多的文字量。

閱讀全文

與javastringgbk編碼相關的資料

熱點內容
同性戀的歐美電影女生 瀏覽:537
韓國保險推銷員電影 瀏覽:78
文字命令結束 瀏覽:870
冰血暴什麼app可以免費看 瀏覽:570
林志玲小說 瀏覽:989
中文字幕好看電影 瀏覽:134
李彩潭作品 瀏覽:404
蘋果好用的加密備忘錄 瀏覽:542
百合小說下載網txt 瀏覽:691
大陸經典三及電影有哪些 瀏覽:31
激怒程序員十句話 瀏覽:302
叫什麼搜索小說的APP 瀏覽:842
《彼時曾相伴》在線觀看 瀏覽:533
女主逃跑被囚禁的小說 瀏覽:615
我愛微笑王子吉祥 瀏覽:322
程序員入職半年年終總結 瀏覽:779
元氣彈app為什麼注冊不了 瀏覽:526
中國程序員黃金期 瀏覽:743
linux丟包率測試 瀏覽:228
高質量帶肉的霸總虐文 瀏覽:903