㈠ java web项目 在linux服务器发送http post请求 中文乱码
在进行post方式提交的时候,写上request.setCharacterEncoding("UTF-8");
记住要在request设置提交参数之前设置字符编码
祝:生活愉快
㈡ 发布到Linux服务器出现页面传入后台的汉字乱码
首先我是用idea开发的,我的需求是在将java项目部署到服务器上,去调取数据,在用?id=北京 这种传参时,linux服务器出现乱码,最后试了多种方法,仅供参考
页面pageEncoding = "utf-8" charset="utf-8"
(1)server.xml 配置端口号出配置 URIEncoding = "UTF-8" 这是针对浏览器的编码
还有个参数 useBodyEncodingForURI = "true"; 暂时没搞清是什么
(2)web.xml 中的字符集过滤器 是针对springMVC的字符集
(3) url 中 ?拼接的参数 不会经过字符集拦截器 重定向中可以使用ModelAndView 的对象,
ModelAndView mv = new ModelAndView("redirect:/index.do");
mv.addObject("id",id);
(4)自定义拦截器
①写一个实现了 HandlerInterceptorAdpter 的拦截器 并且手动实现 preHandle() return true;
② springMVC配置文件中配置
<mvc:interceptors>
<bean id="idInterceptor" class="app.plant.interceptor.IdInterceptor"></bean>
</mvc:interceptors>
③指定字符集
String id = request.getParameter("id");
if(id != null){
id = new String(id.getBytes("iso-8859-1"),"utf-8");
request.setAttribute("id",id);
}
return true;
㈢ 求助android客户端传回的汉字参数,在服务器端出现乱码
android,遇到从android客户端向服务器端发送汉字乱码问题。采用URLConnection的GET方式,在客户端和服
务端都需要进行转码,而采用POST方式则不需要转码。具体方法如下:
用URLConnection从android发送数据有两种方式:
第一种方式:采用get方式传值
(1)客户端代码:
URL url = new URL(mUrl);
URLConnection urlConnection = url.openConnection();
InputStream is = urlConnection.getInputStream();
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = is.read()) != -1) {
baf.append((byte) current);
}
requestInfo = new String(baf.toByteArray(), "UTF-8").trim();
is.close();
对汉字进行处理:
URLEncoder.encode(URLEncoder.encode(channelName, "UTF-8"), "UTF-8")
(2)服务器端接收字段:
URLDecoder.decode(URLDecoder.decode(request.getParameter("nickname"), "UTF-8"), "UTF-8")
第二种方式:采用Post方式:
客户端代码:
public String sendRemoteRequest(String path,String param){
Log.i("lisheng", param.toString());
Log.i("lisheng", path);
String strRes="";
OutputStream os = null;
DataOutputStream dos = null;
InputStream is = null;
BufferedReader br = null;
try {
URL url = new URL(path);
URLConnection urlConn = url.openConnection();
urlConn.setDoInput(true);
urlConn.setDoOutput(true);
os = urlConn.getOutputStream();
dos = new DataOutputStream(os);
dos.write(param.getBytes());
dos.flush();
dos.close();
os.close();
is = urlConn.getInputStream();
br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
for (String strLine = ""; (strLine = br.readLine()) != null;)
strRes = (new StringBuilder(String.valueOf(strRes))).append(strLine).toString();
is.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return strRes;
}
参数里直接写汉字
服务器端代码:
request.setCharacterEncoding("UTF-8");
request.getParameter("nickname")
即可得到参数为汉字的值,不需要转码。