public
隆林網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),隆林網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為隆林?jǐn)?shù)千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請找那個(gè)售后服務(wù)好的隆林做網(wǎng)站的公司定做!
byte[]
getBytes(String
charsetName)
使用指定的字符集將此String編碼為byte序列,結(jié)果存在一個(gè)byte數(shù)組中
public
String(byte[]
bytes,
String
charsetName)
通過使用指定的
charset
解碼指定的
byte
數(shù)組,構(gòu)造一個(gè)新的
String。
在網(wǎng)絡(luò)傳輸中,信息都是以字節(jié)序列的方式傳輸?shù)?。所以,發(fā)送方的String要按照某種編碼方式(如UTF-8,GBK)編碼為字節(jié)序列,在網(wǎng)絡(luò)中傳輸后,接收方取得這個(gè)字節(jié)序列,按照相同的編碼方式將字節(jié)序列解碼為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);
至于你的那個(gè)情況,要先用gbk編碼,然后再用utf-8解碼才能獲得正常的字符串,我估計(jì)是因?yàn)?/p>
1.傳輸過來的字節(jié)碼是用utf-8編碼的,假設(shè)字節(jié)碼為b。
2.你獲得的那個(gè)字符串,假設(shè)為s,是用gbk對(duì)b進(jìn)行解碼獲得的字符串,所以是亂碼。
3.你使用gbk對(duì)s進(jìn)行編碼,用gbk解碼之后再編碼,于是獲得了原來的b。
4.你使用utf-8解碼,所以獲得了正常的字符串。
簡單的說:
b
-
(gbk解碼)
-
亂碼
-
[此處開始是你做的](gbk編碼)
-
b
-
(utf-8解碼)
-
正常字符串
研究完編碼收獲會(huì)不小的,對(duì)以后理解Java的輸入輸出(尤其是網(wǎng)絡(luò)通信和文件讀寫)都很有幫助。
Java中字符串轉(zhuǎn)碼,根據(jù)實(shí)際運(yùn)用的環(huán)境有以下三種方式
使用Java.lang.String這是最常用的方法,先用對(duì)應(yīng)編碼獲取字節(jié),然后重新構(gòu)造新編碼,示例代碼如下:String?s?=?"清山";??
byte[]?b?=?s.getBytes("utf-8");//編碼??
String?sa?=?new?String(b,?"gb2312");//解碼:用什么字符集編碼就用什么字符集解碼
java.io.InputStreamReader/OutputStreamWriter:橋轉(zhuǎn)換讀寫文件的應(yīng)用中,可以使用這種方式,直接在IO流構(gòu)造中轉(zhuǎn)換,示例代碼如下:
InputStream?is?=?new?FileInputStream("C:/項(xiàng)目進(jìn)度跟蹤.txt");//文件讀取??
InputStreamReader?isr?=?new?InputStreamReader(is,?"utf-8");//解碼??
OutputStream?os?=?new?FileOutputStream("C:/項(xiàng)目進(jìn)度跟蹤_gb2312.txt");//文件輸出??
OutputStreamWriter?osw?=?new?OutputStreamWriter(os,?"gb2312");//開始編碼
java.nio.Charset使用nio中的Charset轉(zhuǎn)換字符,示例代碼如下:Charset?inSet?=?Charset.forName("utf-8");??//?解碼字符集?
Charset?outSet?=?Charset.forName("gb2312");??//?編碼字符集??
CharsetDecoder?de?=?inSet.newDecoder();??//?解碼器
CharsetEncoder?en?=?outSet.newEncoder();//?編碼
//在連連看中,在合適的條件下,點(diǎn)到兩個(gè)相同的圖形時(shí),這兩個(gè)圖形會(huì)消失,相當(dāng)于刪除這兩個(gè)圖形
//刪除方法
private void delete(Point p1,final Point p2 , boolean bDelete){
//刪除位置坐標(biāo)列表的聲明和實(shí)例化
ArrayListPoint points=new ArrayListPoint();
//當(dāng)兩個(gè)圖形之間可直線連接時(shí)
if(corner1==null){
//將第一個(gè)圖形加入刪除列表
points.add(p1);
//將第二個(gè)圖形加入刪除列表
points.add(p2);
}//當(dāng)只有一個(gè)拐彎時(shí)
else if(corner2==null){
points.add(p1);
points.add(corner1);
points.add(p2);
}//當(dāng)有兩個(gè)拐彎時(shí)
else{
if(p1.x!=corner1.xp1.y!=corner1.y){
Point pt=corner1;
corner1=corner2;
corner2=pt;
}
points.add(p1);
//將第一個(gè)拐角加入刪除列表
points.add(corner1);
points.add(corner2);
points.add(p2);
}
//如果拐角多余兩個(gè),撤銷選中目標(biāo)
if(bDelete){
delete(p1); delete(p2);
}
//執(zhí)行刪除事件
notifyEffect(points);
}
//獲取圖形列數(shù)
public int getCols() {
return cols;
}
/*
* p 原點(diǎn)
*橫向空白點(diǎn)(包括與原點(diǎn)等值的點(diǎn))
*/
//橫向連線路徑獲取
private ArrayListPoint getHSpaces(Point p,Point pg){
ArrayListPoint ps=new ArrayListPoint();
//左邊空白點(diǎn)坐標(biāo)
for(int dif=1; ;dif++){
//左邊空白點(diǎn)y值
int col=p.y-dif;
//左邊空白點(diǎn)x值
int row=p.x;
//如果已經(jīng)完成或只有一列的情況,返回循環(huán)
if(col0||(data[row][col]!=0!pg.equals(new Point(row,col)))) break;
//將空白點(diǎn)行列添加進(jìn)數(shù)組列表
ps.add(new Point(row,col));
}
//后面的和前面的類似了
//右邊空白點(diǎn)坐標(biāo)
for(int dif=1; ;dif++){
int col=p.y+dif;
int row=p.x;
if(col=cols||(data[row][col]!=0!pg.equals(new Point(row,col)))) break;
ps.add(new Point(row,col));
}
return ps;
}
public int[][] getMaps(){
return data;
}
public int getRows() {
return rows;
}
public Point getSltMatrix() {
return sltMatrix;
}
/*
* p 原點(diǎn)
*縱向空白點(diǎn)(包括與原點(diǎn)等值的點(diǎn))
*/
//縱向連線路徑獲取
private ArrayListPoint getVSpaces(Point p,Point pg)
{
ArrayListPoint ps=new ArrayListPoint();
//左
for(int dif=1; ;dif++){
int col=p.y;
int row=p.x-dif;
if(row0||(data[row][col]!=0!pg.equals(new Point(row,col)))) break;
ps.add(new Point(row,col));
}
//右
for(int dif=1; ;dif++){
int col=p.y;
int row=p.x+dif;
if(row=rows||(data[row][col]!=0!pg.equals(new Point(row,col)))) break;
ps.add(new Point(row,col));
}
return ps;
}
[java]?view plain?copy
String?name="I?am?小明";
toHex(name.toCharArray());
span?style="font-size:18px;?white-space:?pre;"/spanpre?name="code"?class="java"try{
byte[]?iso8859=name.getBytes("ISO-8859-1");
[java]?view plain?copy
toHex(iso8859);
[java]?view plain?copy
byte[]?gb2312=name.getBytes("GB2312");
[java]?view plain?copy
toHex(gb2312);
[java]?view plain?copy
byte[]?gbk=name.getBytes("GBK");
[java]?view plain?copy
toHex(gbk);
[java]?view plain?copy
}
[java]?view plain?copy
String?str="小米";
byte[]?b=str.getBytes("UTF-8");
[java]?view plain?copy
public?byte[]?getBytes(String?charsetName)
throws?UnsupportedEncodingException?{
if?(charsetName?==?null)?throw?new?NullPointerException();
return?StringCoding.encode(charsetName,?value,?0,?value.length);
}
[java]?view plain?copy
static?byte[]?encode(String?charsetName,?char[]?ca,?int?off,?int?len)
throws?UnsupportedEncodingException
{
StringEncoder?se?=?deref(encoder);
String?csn?=?(charsetName?==?null)???"ISO-8859-1"?:?charsetName;
if?((se?==?null)?||?!(csn.equals(se.requestedCharsetName())
||?csn.equals(se.charsetName())))?{
se?=?null;
try?{
Charset?cs?=?lookupCharset(csn);?//生成字符集實(shí)例
if?(cs?!=?null)
se?=?new?StringEncoder(cs,?csn);
}?catch?(IllegalCharsetNameException?x)?{}
if?(se?==?null)
throw?new?UnsupportedEncodingException?(csn);
set(encoder,?se);
}
return?se.encode(ca,?off,?len);
}
[java]?view plain?copy
private?static?Charset?lookupCharset(String?csn)?{
if?(Charset.isSupported(csn))?{
try?{
return?Charset.forName(csn);
}?catch?(UnsupportedCharsetException?x)?{
throw?new?Error(x);
}
}
return?null;
}
[java]?view plain?copy
private?StringEncoder(Charset?cs,?String?rcn)?{
this.requestedCharsetName?=?rcn;
this.cs?=?cs;
this.ce?=?cs.newEncoder()
.onMalformedInput(CodingErrorAction.REPLACE)
.onUnmappableCharacter(CodingErrorAction.REPLACE);
this.isTrusted?=?(cs.getClass().getClassLoader0()?==?null);
}