導航:首頁 > 編程語言 > java轉換編碼

java轉換編碼

發布時間:2024-06-22 17:36:13

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編碼的字元串轉換為ISO-8859-1編碼的字元串

將GB2312格式字元串變為ISO-8859-1需要用到中間輔助類byte[],原理是講字元串轉化成byte,然後將byte轉換成字元串同時轉碼,當然要注意異常的捕捉。

這個過程大致分為2個步驟:

  1. 將字元串轉換成byte[]。

  2. 將byte[]轉換成字元串,同時設置編碼格式為ISO-8859-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中,如何將utf8 十六進制編碼轉換成漢字

當在基於HTTP協議的JSP或Servlet的應用中獲取數據或發送請求時,JVM會把輸送的數據編碼成UTF8格式。如果我們直接從HTTP流中提取中文數據,提取的結果為「????」(可能更多問號),為轉換成我們能夠理解的中文字元,我們需要把UTF8轉換成GB2312,藉助ISO-8859-1標准編碼能夠輕易的實現,下面的代碼實現了這一功能:

byte [] b;
String utf8_value;
utf8_value = request.getParameter("NAME");//從HTTP流中取"NAME"的UTF8數據
b = utf8_value.getBytes("8859_1"); //中間用ISO-8859-1過渡
String name = new String(b, "GB2312"); //轉換成GB2312字元

在知道流長度的情況下將輸入流轉換成位元組數組 Java中的輸入流抽象類InputStream有int read(byte[] b, int off, int len)方法,參數中byte[] b是用來存放從InputStream中讀取的數據,int off指定數組b的偏移地址,也就是數組b的起始下標,int len指定需要讀取的長度,方法返回實際讀取的位元組數。
下面的代碼實現了這一功能:

ServletInputStream inStream = request.getInputStream(); //取HTTP請求流
int size = request.getContentLength(); //取HTTP請求流長度
byte[] buffer = new byte[size]; //用於緩存每次讀取的數據
byte[] in_b = new byte[size]; //用於存放結果的數組
int count = 0;
int rbyte = 0;
while (count < size) {
//循環讀取
rbyte = inStream.read(buffer); //每次實際讀取長度存於rbyte中
for(int i=0;i<rbyte;i++) {
in_b[count + i] = buffer[i];
}
count += rbyte;
}

在不知道流長度的情況下將輸入流轉換成位元組數組 前面介紹了已知流長度的情況下的轉換方法,那麼當我們不知道流有多長時,也就是說不能確定轉換後的位元組數組有多大時,該怎麼處理呢?筆者查看了JDK文檔之後發現ByteArrayOutputStream有一個byte[] toByteArray()方法,該方法會自動創建一個位元組數組,然後返回。於是就巧妙的用ByteArrayOutputStream來作中間過渡實現轉換,其它處理跟上面所介紹已知長度的情況差不多。假設需要被轉換的流已經放在inStream里了,我們可以用如下的代碼實現這一功能:

ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[100]; //buff用於存放循環讀取的臨時數據
int rc = 0;

while ((rc = inStream.read(buff, 0, 100)) > 0) {
swapStream.write(buff, 0, rc);
}
byte[] in_b = swapStream.toByteArray(); //in_b為轉換之後的結果
你試著改寫成自己需要的代碼

Ⅳ Java 修改編碼格式的幾種方式

以一個編碼格式讀取,然後以另一個格式寫入

Ⅵ Java怎麼將字元串轉換為GB2312原編碼

@Test
publicvoidtest333(){
Stringa="青白";
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如何把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;

(7)java轉換編碼擴展閱讀:

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轉換編碼相關的資料

熱點內容
單片機一元左右 瀏覽:145
手機版網站伺服器ip地址查詢 瀏覽:322
kotlin位元組碼反編譯 瀏覽:300
雨雲apP是干什麼 瀏覽:736
php語句大全 瀏覽:591
微信聊天記錄在電腦哪個文件夾可以看到 瀏覽:679
python的事務管理演算法 瀏覽:751
榮耀8x使用了方舟編譯器嗎 瀏覽:259
紅塵直播app在哪裡下載啊 瀏覽:182
app鏈接在哪裡弄 瀏覽:645
水印相機收藏文件夾 瀏覽:572
如何懟程序員面試官 瀏覽:260
應用加密的優缺點 瀏覽:74
程序員培訓班不給錢 瀏覽:513
一堆伺服器能做什麼盈利 瀏覽:367
v20方舟編譯器推送 瀏覽:395
痛點pdf 瀏覽:916
php二維數組取部分值 瀏覽:390
重構流程壓縮時間高效管控 瀏覽:690
phpform參數詳解 瀏覽:559