inputStream本身没有包含转码的方式,源码中
public abstract int read() throws IOException;
public int read(byte b[]) throws IOException
public int read(byte b[], int off, int len)
只有这三种,
然后通过读取到bytes后再转String,怎么转都是乱码,例如
public static void handler(Socket socket) {
byte[] bytes = new byte[1024];
// 通过socket 获取输入流
try {
InputStream inputStream = socket.getInputStream();
// 循环读取客户端发送的数据
while (true) {
int read = inputStream.read(bytes);
System.out.println("bytes===" + bytes);
if (read != -1) {
// 输出客户端发送的数据
String str = new String(bytes, 0, read);
System.out.println(str);
for (byte b: bytes) {
System.out.print(b);
}
} else {
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
System.out.println("关闭和client的连接");
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
最后找了半天:
发现先转为 inputStreamReader,然后转的时候可以设置编码,这时就可以了
public static void handler1(Socket socket) {
char[] chars = new char[1024];
// 通过socket 获取输入流
try {
InputStream inputStream = socket.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "gbk");
// 循环读取客户端发送的数据
while (true) {
int read = inputStreamReader.read(chars);
if (read != -1) {
// 输出客户端发送的数据
String str = new String(chars, 0, read);
System.out.println(str);
} else {
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
System.out.println("关闭和client的连接");
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
最后,不知道字符串的编码方式的话,可以用下面的代码试试
public static String getEncoding(String str) {
String encode = "GB2312";
try {
if (str.equals(new String(str.getBytes(encode), encode))) {
String s = encode;
return s;
}
} catch (Exception exception) {
}
encode = "ISO-8859-1";
try {
if (str.equals(new String(str.getBytes(encode), encode))) {
String s1 = encode;
return s1;
}
} catch (Exception exception1) {
}
encode = "UTF-8";
try {
if (str.equals(new String(str.getBytes(encode), encode))) {
String s2 = encode;
return s2;
}
} catch (Exception exception2) {
}
encode = "GBK";
try {
if (str.equals(new String(str.getBytes(encode), encode))) {
String s3 = encode;
return s3;
}
} catch (Exception exception3) {
}
return "";
}