Web应用开发:Java中不是乱码 Android中是乱码 乱码androidjava编码web应用开发 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 字符串在传输过程中,都是 byte,变成字符串的时候,一般有三种 utf16,utf8,gb2312 编码,一般都用后两种,最好是用utf8,全球通用。 在发送Socket的时候就指定编码,/** * 发送一个Socket通信消息 * @param vo * @return */ public static boolean sendSocket(SocketVo vo) { try { if (!pingServer(vo.getIp(), 2000)) {return false;} Socket socket = new Socket(vo.getIp(), vo.getPort());// 创建socket对象,指定服务器端地址和端口号 OutputStream output = socket.getOutputStream();// 就在这里指定编码格式 Writer writer = new OutputStreamWriter(output, CharEncoding.UTF_8); PrintWriter out = new PrintWriter(writer, true);// 获取 Client 端的输出流 vo.setIp(null);vo.setPort(0); out.print(GsonUtils.toJson(vo));// 填充信息 writer.flush();writer.close(); out.flush();out.close(); output.flush();output.close(); socket.close(); return true; } catch (Exception e) { log.error("发送Socket失败:" + e.getMessage()); return false; } }在接收Socket的时候也按指定编码读取,不可能还会有乱码,String jsonStr = FileUtil.get().readFile(socket.getInputStream(), HTTP.UTF_8, 1, false); socket.close();/** * 读取输入流中的文本 * @param input 输入流 * @param encoding 编码格式(默认为UTF-8) * @param beginLine 从第几行开始读(默认从第1行开始) * @param isLine 读完一行是否写入换行符 * @return String * @throws Exception */ public String readFile(InputStream input, String encoding, int beginLine, boolean isLine) throws Exception { String result = "";beginLine = (beginLine <= 0 ? 1 : beginLine); encoding = (ToolUtil.get().isBlank(encoding) ? HTTP.UTF_8 : encoding); InputStreamReader read = new InputStreamReader(input, encoding); BufferedReader reader = new BufferedReader(read); String line;int i = 1; while ((line = reader.readLine()) != null) { if (i >= beginLine) {result += line + (isLine ? "\n" : "");}i++; } reader.close();read.close();input.close(); return result; } java基础问题 getContentLength()很奇怪的问题 如何通过JNI将复杂对象传递到本地代码? android ->settings能不能设置不可见? 怎样才能学好java,让编程的路走的更远? android的应用程序哪里可以下载? 请教jni和java层的数组传输 android连接别人电脑数据库 Android调用拍照,点击保存调用了onDestroy。 高分请教。 关于Android的一个程序问题,货币转换 跨平台开发做过移动sdk接入的大侠请进 交叉编译android程序的问题
* 发送一个Socket通信消息
* @param vo
* @return
*/
public static boolean sendSocket(SocketVo vo) {
try {
if (!pingServer(vo.getIp(), 2000)) {return false;}
Socket socket = new Socket(vo.getIp(), vo.getPort());// 创建socket对象,指定服务器端地址和端口号
OutputStream output = socket.getOutputStream();
// 就在这里指定编码格式
Writer writer = new OutputStreamWriter(output, CharEncoding.UTF_8);
PrintWriter out = new PrintWriter(writer, true);// 获取 Client 端的输出流
vo.setIp(null);vo.setPort(0);
out.print(GsonUtils.toJson(vo));// 填充信息
writer.flush();writer.close();
out.flush();out.close();
output.flush();output.close();
socket.close();
return true;
} catch (Exception e) {
log.error("发送Socket失败:" + e.getMessage());
return false;
}
}
在接收Socket的时候也按指定编码读取,不可能还会有乱码,
String jsonStr = FileUtil.get().readFile(socket.getInputStream(), HTTP.UTF_8, 1, false);
socket.close();/**
* 读取输入流中的文本
* @param input 输入流
* @param encoding 编码格式(默认为UTF-8)
* @param beginLine 从第几行开始读(默认从第1行开始)
* @param isLine 读完一行是否写入换行符
* @return String
* @throws Exception
*/
public String readFile(InputStream input, String encoding, int beginLine, boolean isLine) throws Exception {
String result = "";beginLine = (beginLine <= 0 ? 1 : beginLine);
encoding = (ToolUtil.get().isBlank(encoding) ? HTTP.UTF_8 : encoding);
InputStreamReader read = new InputStreamReader(input, encoding);
BufferedReader reader = new BufferedReader(read);
String line;int i = 1;
while ((line = reader.readLine()) != null) {
if (i >= beginLine) {result += line + (isLine ? "\n" : "");}i++;
}
reader.close();read.close();input.close();
return result;
}