javastring的編碼
❶ 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中的String的默認編碼是什麼
可以通過如下代碼獲得默認編碼:
System.out.println(Charset.defaultCharset());
字元編碼(英語:Character encoding)也稱字集碼,是把字元集中的字元編碼為指定集合中某一對象(例如:比特模式、自然數序列、8位組或者電脈沖),以便文本在計算機中存儲和通過通信網路的傳遞。常見的例子包括將拉丁字母表編碼成摩斯電碼和ASCII。其中,ASCII將字母、數字和其它符號編號,並用7比特的二進制來表示這個整數。通常會額外使用一個擴充的比特,以便於以1個位元組的方式存儲。
在計算機技術發展的早期,如ASCII(1963年)和EBCDIC(1964年)這樣的字元集逐漸成為標准。但這些字元集的局限很快就變得明顯,於是人們開發了許多方法來擴展它們。對於支持包括東亞CJK字元家族在內的寫作系統的要求能支持更大量的字元,並且需要一種系統而不是臨時的方法實現這些字元的編碼。
❸ javastring編碼
從ISO-8859-1編碼轉為GBK編碼,因為所有的編碼底層都是Unicode編碼就是為了編碼的統一
最後是GBK編碼,默認看eclipse的配置,不該的情況是ISO-8859-1,最好改為UTF-8
❹ 請問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如何把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;
(5)javastring的編碼擴展閱讀:
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的編碼與解碼
public
byte[]
getBytes(String
charsetName)
使用指定的字元集將此String編碼為byte序列,結果存在一個byte數組中
public
String(byte[]
bytes,
String
charsetName)
通過使用指定的
charset
解碼指定的
byte
數組,構造一個新的
String。
在網路傳輸中,信息都是以位元組序列的方式傳輸的。所以,發送方的String要按照某種編碼方式(如UTF-8,GBK)編碼為位元組序列,在網路中傳輸後,接收方取得這個位元組序列,按照相同的編碼方式將位元組序列解碼為String。
請看下面的代碼片段:
String
name
=
"張三";
byte[]
b1
=
name.getBytes("UTF-8");
String
name1
=
new
String(b1,
"UTF-8");
//編碼解碼相同,正常顯示
System.out.println(name1);
String
name2
=
new
String(b1,
"GBK");
//編碼解碼不同,亂碼
System.out.println(name2);
byte[]
b2
=
name.getBytes("GBK");
String
name3
=
new
String(b2,
"GBK");
//編碼解碼相同,正常顯示
System.out.println(name3);
String
name4
=
new
String(b2,
"UTF-8");
//編碼解碼不同,亂碼
System.out.println(name4);
至於你的那個情況,要先用gbk編碼,然後再用utf-8解碼才能獲得正常的字元串,我估計是因為
1.傳輸過來的位元組碼是用utf-8編碼的,假設位元組碼為b。
2.你獲得的那個字元串,假設為s,是用gbk對b進行解碼獲得的字元串,所以是亂碼。
3.你使用gbk對s進行編碼,用gbk解碼之後再編碼,於是獲得了原來的b。
4.你使用utf-8解碼,所以獲得了正常的字元串。
簡單的說:
b
->
(gbk解碼)
->
亂碼
->
[此處開始是你做的](gbk編碼)
->
b
->
(utf-8解碼)
->
正常字元串
研究完編碼收獲會不小的,對以後理解Java的輸入輸出(尤其是網路通信和文件讀寫)都很有幫助。
❼ java的String存儲中文的時候 存的是什麼,是按照什麼編碼方式存儲的
String在內存中是以UCS-2編碼或者叫UTF-16的早期版本存儲。
當寫入文件可以用其他指定的編碼,比如GB2312,GBK,BIG5等。
❽ 怎麼 知道 java字元串 編碼格式
這樣的測試方法是不正確的。getBytes(charset)是解碼,new String(byte[], charset)是編碼。new String(str.getBytes(charset),charset)是解碼再編碼,無論charset是什麼編碼格式,返回的字元串內容原始str是一致,因此equals方法都是返回true,達不到測試字元串編碼格式的目的。個人觀點:正確的測試姿勢應該是這樣的:
Stringcharset="xxx";//假定編碼格式
Stringstr="中文";
booleanflag=str.equals(newString(str.getBytes(),charset));
flag為true則表明str的編碼格式是假定的編碼格式。其中說明str.getBytes()該方法就是按其自身編碼格式去解碼。其自身編碼格式跟你的操作系統編碼格式或你使用的IDE設置的文件的Text file encoding有關。
❾ java中使用 Integer.toBinaryString()得到的是什麼編碼
最終得到的111001110001011(10進制為29579)對應的是「王」字在unicode中的編號,即unicode中第29579個字元是「王」。具體存儲時會佔用幾個位元組,是由編碼來決定的,gbk編碼下「王」字佔用2個位元組,utf-8則為3個位元組。