62,614
社区成员
发帖
与我相关
我的任务
分享
String s = "111aaa啊啊啊";
byte[] b = s.getBytes();
BufferedReader br = new BufferedReader(new InputStreamReader( new ByteArrayInputStream(b)));
String line = br.readLine();
public static void main(String[] args) {
String str = "111aaa啊啊啊";
//实际应用中这个是从外部获得的,必须知道对方用的什么编码!!
byte[] bytes = str.getBytes();
// String res = new String(bytes);
// System.out.println(res);
//下面这段代码是从JDK源码里面分离出来的,去掉了关于字符串编码方面的判断
//其实什么意义都没有!!
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i < bytes.length; i++) {
byte b = bytes[i];
if (b >= 0) {
stringBuffer.append((char) b);
} else {//这个部分是在把中文字符的编码转换成字符
byte[] tmp = new byte[2];
tmp[0] = b;
tmp[1] = bytes[i + 1];
Charset cs = Charset.defaultCharset();
ByteBuffer byteBuffer = ByteBuffer.wrap(tmp);
CharsetDecoder decoder = cs.newDecoder();
try {
CharBuffer charBuffer = decoder.decode(byteBuffer);
char ch = charBuffer.get();
System.out.println(ch);
stringBuffer.append(ch);
} catch (CharacterCodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
i++;
}
}
System.out.println(stringBuffer.toString());
}
// byte转char
private char[] getChars (byte[] bytes) {
Charset cs = Charset.forName ("UTF-8");
ByteBuffer bb = ByteBuffer.allocate (bytes.length);
bb.put (bytes);
bb.flip ();
CharBuffer cb = cs.decode (bb);
return cb.array();
}
网上找来的,用ByteBuffer和CharBuffer来做的,楼主可以试试[/quote]这个方法试过了 不可行的 首先上面的编码并不能改变操作系统的编码 而是改变了此程序在运行时的编码 其实跟没用一个样 然后这个是转换整个BYTE[] 完了还是乱码 不可行
// byte转char
private char[] getChars (byte[] bytes) {
Charset cs = Charset.forName ("UTF-8");
ByteBuffer bb = ByteBuffer.allocate (bytes.length);
bb.put (bytes);
bb.flip ();
CharBuffer cb = cs.decode (bb);
return cb.array();
}
网上找来的,用ByteBuffer和CharBuffer来做的,楼主可以试试
byte []b=s.getBytes("ISO-8859-1");
for(int i=0;i<b.length;i++){
byte a = b[i];
System.out.println(a);
}
String c=new String(b,"UTF-8");
System.out.print(c);
把byte转换成String可以这么做,转成Char就不知道了。