Ⅰ 怎麼用java把一個字元串進行utf8編碼
String text = 「字元串」;
byte[] b_utf8 = text.getBytes("UTF-8"); //utf-8
byte[] b_iso88591 = text.getBytes("ISO8859-1"); //iso8859-1
byte[] b_gbk = text.getBytes("GBK"); //gbk
string unicode = getUnicode(text);//unicode
public static String getUnicode(String source) {
String result = "";
for (int i = 0; i < source.length(); i++) {
result += "\u"+Integer.toHexString((int) source.charAt(i));
}
return result;
}
Ⅱ java中如何修改字元串編碼
StringBuilder
sb
=
new
StringBuilder();
//
創建URL
URL
url
=
new
URL("GBK
page
URL");
//
打開請求鏈接
URLConnection
page
=
url.openConnection();
//
以GBK格式讀取返迴流
BufferedReader
in
=
new
BufferedReader(new
InputStreamReader(page.getInputStream(),"GBK"));
//
讀取流內容
String
inputLine;
while
((inputLine
=
in.readLine())
!=
null)
{
sb.append(inputLine);
}
sb.toString();
Ⅲ java中如何修改字元串編碼
假設你的字元串的位元組數組是buf,按照GBK解析這個字元串的方法就是如下
String str=new String(buf,0,buf.length,"GBK");
如果是utf-8編碼,就把GBK換成utf-8即可
Ⅳ 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;
(4)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怎樣實現將GB2312編碼的字元串轉換為ISO-8859-1編碼的字元串
將GB2312格式字元串變為ISO-8859-1需要用到中間輔助類byte[],原理是講字元串轉化成byte,然後將byte轉換成字元串同時轉碼,當然要注意異常的捕捉。
這個過程大致分為2個步驟:
將字元串轉換成byte[]。
將byte[]轉換成字元串,同時設置編碼格式為ISO-8859-1。
操作過程如下圖所示
Ⅵ JAVA字元串編碼問題!
這種編碼問題真是很tricky的問題。說它tricky是因為這至少涉及到以下4種編碼選取的排列組合(有時甚至更多),更有時乃至會發生錯進錯出,負負得正,中間過程錯了但反而到不是亂碼的情況。
(1)源代碼的編碼
(2)編譯時告訴java編譯器的源代碼編碼
(3)運行時jvm參數file.encoding
(4)輸出終端對輸出位元組流的解碼所採用的碼組
在這簡單情況下(1)和(2)一致,(3)和(4)一致就不會因為編解碼映射錯誤(當然字元向終端字體映射的錯誤是另一回事,如字體缺失之類)。而(1)(2)和(3)(4)不必一致,這樣就使得不必強求開發編譯環境和運行應用環境的編碼必須一致。
源代碼的錄入與編譯若在在一個平台上時,大多數情況沒有問題(反而用聰明的Idea IDE設置錯誤時會亂套,越是簡陋的開發環境越不太會錯)。但是如果你在中文GBK編碼平台上的源代碼在別人的unicode編碼平台上編譯,就有問題了。所以和別人,特別是和不同母語的人合作編程時,建議要麼約定一律用unicode作為源文件編碼;要麼只用ASCII字元,反正其他編碼一般都和ASCII兼容的,對於非ASCII字元,用Java的/uxxxx表示機制,比如"中國"就表示為"\u4e2d\u56fd"。4e2d和56fd分別是中國二字的unicode十六進制編碼。
但我認為樓主在這里其實主要關心的是運行時的編碼一致問題,即(3)和(4)。所以言歸正傳,讓我們來檢查它們是否一致。
由於正如上述,iso8859-1編碼集其實是被其他所有公認的編碼集所兼容的,也就是說它是所有公認編碼集的公共子集。所以以iso8859-1為基礎可以外延到任何一個公認編碼集。事實上大多數情況也是這樣做的。比如java System property里設定了encoding為iso8859-1,事實上不僅僅是一個Latin字母的映射,在非Latin區域按JVM宿主操作系統的編碼擴展。即選iso8859-1其實是選擇了宿主操作系統的默認編碼。
假設樓主的操作系統編碼是GBK,那麼file.encoding=iso8859-1相當於選擇了file.encoding=GBK。那麼System.out.println(...)這個核心類方法會將china字元轉換為file.encoding指定的編碼(GBK)位元組由out流輸出給最終out所綁定的終端。比如console一般採用系統默認編碼也是GBK的話,那就和file.encoding一致,能正常解碼,不會亂碼。
至於System.out.write()直接寫位元組流。由於該位元組流是由china.getBytes()得到的,在不指定編碼的時候使用file.encoding指定的默認值的(即GBK),因此Str->Byte的編碼方法GBK和console採用的解碼方法GBK又是一致的,所以也不是亂碼。
但是這時候用toHexString列印出的兩個位元組串是不一樣的。先直接把china逐字強行轉換為int的情況,不涉及輸出編碼,總是unicode的。(JVM規范規定class里字串必須unicode編碼)只要上述(1) (2)匹配,java編譯器會自動從各種編碼的源文件正確轉成class文件里統一unicode編碼的字串。相反,作為一個題外話提一下,當(1)(2)不匹配時會在特定的一種配合(1)(2)的(3)(4)也不匹配的情況下會負負得正輸出正常,但這是絕對錯誤的做法,因為任何要求(1)(2)和(3)(4)有匹配關系的要求都是在應用中可能無法滿足的。java編譯器對這種情況也會報告warning,但不fail。
綜上,一旦file.encoding設成宿主操作系統默認而系統consle也採用操作系統默認編解碼的話,(3)(4)總是一致的,無論系統選擇的是GBK還是utf-8等等。
那麼如果file.encoding不選系統默認呢?比如utf-8。那就很可能出現亂碼了。但是,慢著,試驗的結果還是沒有亂碼。那是因為file.encoding是靜態的JVM系統參數,在程序里像樓主那樣設定是不起作用的(我不知道有沒有辦法發一個什麼通知讓這種程序改變生效的)。必須作為JVM參數直接傳給java程序讓它構造虛擬機的時候就得到這個參數,否則JVM會去拿宿主系統的默認值,就相當於又回到設file.encoding=iso8859-1了。
java -Dfile.encoding=utf-8 A
這下終於亂碼了,而且兩個都亂了。列印出的位元組串一個還是unicode,另一個從GBK變到utf-8了。
如果你發現試驗的現象和我上面說的正好相反,請注意檢查console的編碼設置,我們上面假設它也採用了宿主系統默認編碼,但有些console很高級的嘞,可以設置成不通編碼的(其實幾乎所有的都可以)。那麼分析的方法和上面一樣,結果可能正好相反。
Ⅶ 請問java如何改變字元串的編碼方式
byte[] b=string.getBytes("GB2312");//使用GB2312編碼方式對字元串string進行編碼
//這時要想將位元組數組b的內容正確解碼只能使用GB2312的編碼方式進行解碼,即
String str=new String(b,"GB2312");//這里若使用UTF-8編碼方式來進行解碼就會亂碼
//將eclipse默認的編碼方式改為UTF-8,只是用該編碼方式對.java源文件進行編碼保存
//這個對new String(string.getBytes("GB2312"),"UTF-8")沒啥影響的
//因為從java源文件獲取字元串string時,已經通過UTF-8編碼方式進行解碼了
//而string.getBytes("GB2312")是使用指定的編碼方式對字元串string進行從新編碼
//這兩者之間沒啥關系的
Ⅷ java 怎麼把一個字元串進行utf8編碼
樓上答得不對,請相信我的方法,已經確認過:
String s="abc";
String s1=URLEncoder.encode(s, "utf-8");
Ⅸ java怎麼對string編碼
參考如下代碼:
package com.qiu.lin.he;
import java.io.UnsupportedEncodingException;
public class Ceshi {
public static void main(String[] args) {
String name = "張三";
byte[] b1 = null;
try {
b1 = name.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String name1 = "";
try {
name1 = new String(b1, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} // 編碼解碼相同,正常顯示
System.out.println(name1);
String name2 = "";
try {
name2 = new String(b1, "GBK");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} // 編碼解碼不同,亂碼
System.out.println(name2);
}
}
運行結果為:
Ⅹ 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進制就可以了。