① byte[]轉string亂碼 java
圖片等二進制數據是不能直接對應成任何字元編碼的字元串。
如果非要用字元串可以轉成base64或hex。
Stringt=javax.xml.bind.DatatypeConverter.printBase64Binary(byte_array);
② java中文string 亂碼如果不正則直接System.in.read(by)可以往文件寫入中文可是我想進行匹配就要經過String
這里肯定會出亂碼的,必需將得到的位元組碼再次進行編碼,一般是16進制編碼。
如:
byte []bytes=md5.digest(user.getPassword().getBytes("utf8"));
StringBuilder ret=new StringBuilder(bytes.length<<1);
for(int i=0;i<bytes.length;i++){
ret.append(Character.forDigit((bytes[i]>>4)&0xf,16));
ret.append(Character.forDigit(bytes[i]&0xf,16));
}
user.setPassword(ret.toString());
③ java new String(byte[],UTF-8)編碼問題
Windows的記事本編碼用的是系統內碼。
而簡體Windows默認編碼就是GBK,所以你肯定要用GBK來解碼啊。
要不然你就不要自己用byte[]來讀取,而是用BufferedReader來readLine()就好了。
或者你可以試著獲取系統默認編碼。
④ java String.substring 亂碼
因為你的源是GBK編碼,儲存到String後沒有指定編碼,所以是按java默認編碼存入的。整個輸出時沒有問題,但是使用substring方法去截取一段的時候,編碼不同自然就亂碼了。
你可以使用String類的構造函數String(byte[] bytes, String charsetName) 來指定編碼。
str = new String(s.getBytes(),"GBK");
再subString應該就沒問題了。
⑤ java中字元亂碼轉化的問題
如果B接受編碼方式也不能更改為和A一致,那麼舉個例子
A GBK,B UTF-8
B獲取的內容亂碼,
String s=request.getParameter("欄位名");
這里s會亂碼,可以做如下轉換
byte[] bytes=s.getBytes(" B當前的編碼格式");
String s=new String(bytes,"A的編碼方式");
這個時候s就正常了
⑥ JAVA,字元串輸出亂碼。。
如果這個文件內容只是一些文本信息,不是類圖片等的二進制數據,不要使用這種方式讀寫,應該用BufferedReader和FileReader,可指定文本的編碼方式,因為文本中的一個字元可能由1位元組、或2位元組或更多位元組組成(由編碼方式不同而不同)。你以位元組方式讀取可能打斷一個完整的字元。
另你的由位元組數組轉為字元串可使用new String,並指定編碼方式(如utf-8,unicode等)
⑦ java中文亂碼,能說下string.getBytes()和new String()轉碼是,具體點。
1、Java中,【String.getBytes(String decode)】的方法,會根據指定的decode,編碼返回某字元串在該編碼下的byte數組表示,例如:
byte[] b_gbk = "中".getBytes("GBK");
byte[] b_utf8 = "中".getBytes("UTF-8");
byte[] b_iso88591 = "中".getBytes("ISO8859-1")
上面三行代碼表示:分別返回「中」這個漢字在GBK、UTF-8和ISO8859-1編碼下的byte數組表示,此時b_gbk的長度為2,b_utf8的長度為3,b_iso88591的長度為1。
2、而通過【new String(byte[], decode)】的方式來還原這個「中」字時,實際是使用decode指定的編碼來將byte[ ]解析成字元串,例如:
String s_gbk = new String(b_gbk,"GBK");
String s_utf8 = new String(b_utf8,"UTF-8");
String s_iso88591 = new String(b_iso88591,"ISO8859-1");
s_gbk和s_utf8都是「中」,而只有s_iso88591是一個不認識 的字元,因為ISO8859-1編碼的編碼表中,根本就沒有包含漢字字元,當然也就無法通過"中".getBytes("ISO8859-1")。
因此,通過【String.getBytes(String decode)】方法來得到byte[ ]時,要確定decode的編碼表中確實存在String表示的碼值,這樣得到的byte[ ]數組才能正確被還原。
(7)javabytestring亂碼擴展閱讀
java中文編碼避免亂碼
1、為了讓中文字元適應某些特殊要求(如http header頭要求其內容必須為iso8859-1編碼),可能會通過將中文字元按照位元組方式來編碼的情況,比如:
String s_iso88591 = new String("中".getBytes("UTF-8"),"ISO8859-1")
2、上述例子中的s_iso8859-1字元串實際是三個在 ISO8859-1中的字元,在將這些字元傳遞到目的地後,目的地程序再通過相反的方式:
String s_utf8 = new String(s_iso88591.getBytes("ISO8859-1"),"UTF-8")
來得到正確的中文漢字。這樣就既保證了遵守協 議規定、也支持中文。
3、String.getBytes(String decode)方法會根據指定的decode編碼返回某字元串在該編碼下的byte數組表示這里是encode ,not decode,從字元串到位元組數組是編碼的過程,從位元組數組到字元串(即 new String(byte[] , charsetname))才是解碼的過程。
⑧ java 字元串字元串亂碼問題
應該是編碼格式的問題吧
//ISO編碼轉為GBK編碼
public static String ISOtoGBK(String s) {
String str = "";
try {
if (s == null || s == "" || s.equals("")) {
str = s;
} else {
str = new String(s.getBytes("ISO8859-1"),"GBK");
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
⑨ java位元組數組轉換中文亂碼,請求幫助
String str = new String(test,"UTF-16");
System.out.println(str);
列印結果:???流量已使用1000.00MB,剩餘0.00MB;(均不含半年包、定向流量包)。超出流量0.00MB,超出流量(不含港澳台)按照約定資費
⑩ java 輸出byte[]出現亂碼
byte[] ba數組可以理解成是byte的類,ba的是個對象,10,50可以看出對象的二個成員變數,你要調用對象的某個成員變數,有對應的方法,那麼要訪問數組裡面的數據就要要用ba[i]這個方法才可以調用。ba在棧裡面存放的是hashcode碼,這個碼可以在堆內存裡面找到一塊空間,裡面存放這10和50這2個數,System.out.println(ba);這個句子只能輸出ba裡面存的hashcode碼,所以你只能得到[B@18a992f這個碼。