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; } android4.0系统广播问题 关于webview的缓存问题 android初学者报道 日历 进入日历新建一个日程后再删除,总览界面还有绿色的图标显示,应该清除 设置初始化音乐音量问题 求指导 关于Android APP开发的问题 学习android新手,实例中学习,最近在做这个例子,想通过例子掌握和学习,通过webservice读取mssql数据库记录并显示,遇到了问题,请帮忙! 在android设备上添加thttpd及CGI MD5揭秘问题 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;
}