Ⅰ java 中編碼解碼問題
new String(strLine.getBytes("iso8859-1"),"gb2312")
其實這里很好明白
首先將字元串轉換成byte數組。。以iso8859-1的編碼來轉換。。
然後使用new String創建一個新字元串,前面帶上byte[]數組 後面帶上他的具體編碼。。
一般轉碼都使用這樣的方式。。JSP里經常出現亂碼的
都是加上過濾器然後中間使用這個new String(strLine.getBytes("iso8859-1"),"gb2312")方式將編碼轉換。
請採納答案,支持我一下。
Ⅱ 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;
(2)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里關於String的編碼與解碼
從語言編碼的角度,getBytes(charset)不是解碼、也不是編碼,是轉換。API 說的是針對數據的角度。把一個整體的String分解成byte[]了。
byte[] b2=s.getBytes("gbk");
String ss=new String(b2,"utf-8");
從GBK轉換成UTF-8。
UTF8包含更多的文字量。
Ⅳ java中編碼與解碼分別指什麼
java中編碼:URLEncoder.encode(strUri,"utf-8");
java中解碼碼:URLDecoder.decode(strUri,"utf-8");
Ⅳ 我是學java的 請問什麼是字元編碼和解碼
字元集:使用哪些字元。也就是說哪些漢字,字母和符號會被收入標准中。所包含「字元」的集合就叫做「字元集」。
編碼:規定每個「字元」分別用一個位元組還是多個位元組存儲,用哪些位元組來存儲,這個規定就叫做「編碼」。
各個國家和地區在制定編碼標準的時候,「字元的集合」和「編碼」一般都是同時制定的。因此,平常我們所說的「字元集」,比如:GB2312, GBK, JIS 等,除了有「字元的集合」這層含義外,同時也包含了「編碼」的含義。
Ⅵ java是如何編碼解碼的
[java]view plain
Stringname="Iam小明";
toHex(name.toCharArray());
<spanstyle="font-size:18px;white-space:pre;"></span><prename="code"class="java">try{
byte[]iso8859=name.getBytes("ISO-8859-1");
[java]view plain
toHex(iso8859);
[java]view plain
byte[]gb2312=name.getBytes("GB2312");
[java]view plain
toHex(gb2312);
[java]view plain
byte[]gbk=name.getBytes("GBK");
[java]view plain
toHex(gbk);
[java]view plain
}
[java]view plain
Stringstr="小米";
byte[]b=str.getBytes("UTF-8");
[java]view plain
publicbyte[]getBytes(StringcharsetName)
{
if(charsetName==null)thrownewNullPointerException();
returnStringCoding.encode(charsetName,value,0,value.length);
}
[java]view plain
staticbyte[]encode(StringcharsetName,char[]ca,intoff,intlen)
{
StringEncoderse=deref(encoder);
Stringcsn=(charsetName==null)?"ISO-8859-1":charsetName;
if((se==null)||!(csn.equals(se.requestedCharsetName())
||csn.equals(se.charsetName()))){
se=null;
try{
Charsetcs=lookupCharset(csn);//生成字元集實例
if(cs!=null)
se=newStringEncoder(cs,csn);
}catch(IllegalCharsetNameExceptionx){}
if(se==null)
(csn);
set(encoder,se);
}
returnse.encode(ca,off,len);
}
[java]view plain
(Stringcsn){
if(Charset.isSupported(csn)){
try{
returnCharset.forName(csn);
}catch(UnsupportedCharsetExceptionx){
thrownewError(x);
}
}
returnnull;
}
[java]view plain
privateStringEncoder(Charsetcs,Stringrcn){
this.requestedCharsetName=rcn;
this.cs=cs;
this.ce=cs.newEncoder()
.onMalformedInput(CodingErrorAction.REPLACE)
.onUnmappableCharacter(CodingErrorAction.REPLACE);
this.isTrusted=(cs.getClass().getClassLoader0()==null);
}
Ⅶ 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編碼和解碼的通俗解釋
在內存中,本來沒有字元的概念,每個位元組都是一個0-255的數字。我們把數字進行編號,每個數字代表一個字元。追根溯源,以ASCII碼為例。比如65(十進制)定義為字元'A',66定義為'B',61定義為'='。這就是編碼。然後才有了char型定義,實際上等同於byte,只是使用char型時就知道要表示的是字元。如果char ch=65,然後printf("%c",ch),出來就是'A',這就是解碼了。如果printf("%d",ch),那出來就仍是65。 單位元組byte只能支持0-255的編碼,對於亞洲語言,像中文漢字,是完全不夠用的。所以之後有雙位元組(0-65535)以及多位元組編碼的出現。以雙位元組為例,0-65535並不能同時為多種語言編碼。所以打個比方,同一個數字,可能在中文GBK編碼時定義為漢字'王',而在日文編碼MS932中就被定義為'小'。當內存中的數字被解釋為字元(文字和符號)時,就是解碼過程,把文字和符號用數字定義時就是編碼。實際編碼過程中,不少是前後位元組有關聯性定義的,並非我說的那麼簡單。 在網路傳輸時,實際上仍然是單位元組,甚至是位元組中1個bit一個bit傳輸的。我們在傳輸時使用byte數組,即基本類型,而在傳輸前後轉回GBK中文編碼。以老美的視角來看問題,則從byte變成亞洲語言(GBK/Unicode)屬於編碼encoding,而相反過程是解碼decoding。
Ⅸ java導出 Excel時,對特殊字元編碼後的字元串進行解碼
//關鍵代碼
HSSFCell cell = new HSSFCell();
cell.setCellType(HSSFCell.CELL_TYPE_STRING);