json在客户端和服务器端传中文乱码的问题

glwang520 2013-10-16 02:01:53

客户端封装的json

HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(strUrl);
StringEntity entity = new StringEntity(json);
entity.setContentType("application/json");
entity.setContentEncoding("utf-8");
post.setEntity(entity);
HttpResponse responString = client.execute(post);


服务器端接受数据:

try {
BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream) request.getInputStream()));
String line = "";

StringBuilder sb = new StringBuilder();
while((line = br.readLine())!=null){
sb.append(line);
}
System.out.println("diaryjson:"+sb.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("diaryjson receive failure!!!!");
}


传递的数据中有中文,服务器端获取到的是乱码,如何解决?!
...全文
4101 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
鱼跃龙门 2016-06-15
  • 打赏
  • 举报
回复
引用 10 楼 u012977335 的回复:
StringEntity rentity = new StringEntity(jsonStr, "UTF-8"); 这样试下。
我试过这个办法,行得通。
小鬼添香 2013-11-27
  • 打赏
  • 举报
回复
StringEntity rentity = new StringEntity(jsonStr, "UTF-8"); 这样试下。
glwang520 2013-10-16
  • 打赏
  • 举报
回复
java中的URLEncoder和URLDecoder类处理编码与解码问题 编码:URLEncoder.encode(origialStr,"UTF-8"); 解码:URLDecoder.decode(sb.toString(),"utf-8");
glwang520 2013-10-16
  • 打赏
  • 举报
回复
引用 7 楼 a1150247879 的回复:
[quote=引用 6 楼 glwang520 的回复:] [quote=引用 5 楼 a1150247879 的回复:] URLDecoder.decode是解码把。 LZ把发送的数据用URLEncoder.encode编码下,在接收到时再用URLDecoder.decode解码下
网上说的这些个方法我都试过了!!!你说的方法我也试过了!!! 这是生成json的方法最后返回的就是你说的。

public String MakeDiaryJson(String title,String context,String createtime,String lastmodifytime, int user_id) throws Exception{
		String diaryjson="";
		JSONObject json = new JSONObject();
		try {
			//diary中存入日记标题
			json.put("title", title);
			//diary中存入日记内容
			json.put("context", context);
			//diary中存入日记创建时间
			json.put("createtime", createtime);
			//diary中存入日记最后一次修改时间
			json.put("lastmodifytime", lastmodifytime);
			//diary中存入日记外键,就是这篇日记是属于哪个用户的
			json.put("user_id", user_id);			
			diaryjson = json.toString();
			URLDecoder.decode(diaryjson,"utf-8");
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			Log.i("JSonInfo:", "MakeDiaryJson create failure!!!!");
		}
		return URLDecoder.decode(diaryjson,"utf-8");
		};
服务器的代码:

public String execute() throws Exception {
		// TODO Auto-generated method stub
		System.out.println("execute()方法被执行了!!!");
		 try {
				BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream) request.getInputStream()));
				  
				 String line = "";			
				 StringBuilder sb = new StringBuilder();
				 while((line = br.readLine())!=null){
				 sb.append(line);
				 }
				 System.out.println("diaryjson:"+URLDecoder.decode(sb.toString(),"utf-8"));

			 } catch (IOException e) {
				// TODO Auto-generated catch block
				System.out.println("diaryjson receive failure!!!!");
				
			}	 
[/quote] return URLDecoder.decode(diaryjson,"utf-8");//这句是解码代码,发送时用编码 [/quote] 用什么编码?是用encodeuricomponent()?
a1150247879 2013-10-16
  • 打赏
  • 举报
回复
引用 6 楼 glwang520 的回复:
[quote=引用 5 楼 a1150247879 的回复:] URLDecoder.decode是解码把。 LZ把发送的数据用URLEncoder.encode编码下,在接收到时再用URLDecoder.decode解码下
网上说的这些个方法我都试过了!!!你说的方法我也试过了!!! 这是生成json的方法最后返回的就是你说的。

public String MakeDiaryJson(String title,String context,String createtime,String lastmodifytime, int user_id) throws Exception{
		String diaryjson="";
		JSONObject json = new JSONObject();
		try {
			//diary中存入日记标题
			json.put("title", title);
			//diary中存入日记内容
			json.put("context", context);
			//diary中存入日记创建时间
			json.put("createtime", createtime);
			//diary中存入日记最后一次修改时间
			json.put("lastmodifytime", lastmodifytime);
			//diary中存入日记外键,就是这篇日记是属于哪个用户的
			json.put("user_id", user_id);			
			diaryjson = json.toString();
			URLDecoder.decode(diaryjson,"utf-8");
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			Log.i("JSonInfo:", "MakeDiaryJson create failure!!!!");
		}
		return URLDecoder.decode(diaryjson,"utf-8");
		};
服务器的代码:

public String execute() throws Exception {
		// TODO Auto-generated method stub
		System.out.println("execute()方法被执行了!!!");
		 try {
				BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream) request.getInputStream()));
				  
				 String line = "";			
				 StringBuilder sb = new StringBuilder();
				 while((line = br.readLine())!=null){
				 sb.append(line);
				 }
				 System.out.println("diaryjson:"+URLDecoder.decode(sb.toString(),"utf-8"));

			 } catch (IOException e) {
				// TODO Auto-generated catch block
				System.out.println("diaryjson receive failure!!!!");
				
			}	 
[/quote] return URLDecoder.decode(diaryjson,"utf-8");//这句是解码代码,发送时用编码
glwang520 2013-10-16
  • 打赏
  • 举报
回复
引用 5 楼 a1150247879 的回复:
URLDecoder.decode是解码把。 LZ把发送的数据用URLEncoder.encode编码下,在接收到时再用URLDecoder.decode解码下
网上说的这些个方法我都试过了!!!你说的方法我也试过了!!! 这是生成json的方法最后返回的就是你说的。

public String MakeDiaryJson(String title,String context,String createtime,String lastmodifytime, int user_id) throws Exception{
		String diaryjson="";
		JSONObject json = new JSONObject();
		try {
			//diary中存入日记标题
			json.put("title", title);
			//diary中存入日记内容
			json.put("context", context);
			//diary中存入日记创建时间
			json.put("createtime", createtime);
			//diary中存入日记最后一次修改时间
			json.put("lastmodifytime", lastmodifytime);
			//diary中存入日记外键,就是这篇日记是属于哪个用户的
			json.put("user_id", user_id);			
			diaryjson = json.toString();
			URLDecoder.decode(diaryjson,"utf-8");
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			Log.i("JSonInfo:", "MakeDiaryJson create failure!!!!");
		}
		return URLDecoder.decode(diaryjson,"utf-8");
		};
服务器的代码:

public String execute() throws Exception {
		// TODO Auto-generated method stub
		System.out.println("execute()方法被执行了!!!");
		 try {
				BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream) request.getInputStream()));
				  
				 String line = "";			
				 StringBuilder sb = new StringBuilder();
				 while((line = br.readLine())!=null){
				 sb.append(line);
				 }
				 System.out.println("diaryjson:"+URLDecoder.decode(sb.toString(),"utf-8"));

			 } catch (IOException e) {
				// TODO Auto-generated catch block
				System.out.println("diaryjson receive failure!!!!");
				
			}	 
a1150247879 2013-10-16
  • 打赏
  • 举报
回复
URLDecoder.decode是解码把。 LZ把发送的数据用URLEncoder.encode编码下,在接收到时再用URLDecoder.decode解码下
glwang520 2013-10-16
  • 打赏
  • 举报
回复
引用 3 楼 yxinf 的回复:
在返回结果的字符串也做一下编码处理试试:

System.out.println("diaryjson:"+URLDecoder.decode(sb.toString(),"utf-8"));


要发的数据:
加了你的语句之后:

加不加都是那个效果!!!那位大神能解决小小弟的疑惑啊!!!!!!!!!
yxinf 2013-10-16
  • 打赏
  • 举报
回复
在返回结果的字符串也做一下编码处理试试:

System.out.println("diaryjson:"+URLDecoder.decode(sb.toString(),"utf-8"));
glwang520 2013-10-16
  • 打赏
  • 举报
回复
引用 1 楼 guoyoulei520 的回复:
以前做jsp时是这样解决的 String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8"); 应该可以参考下
getBytes("ISO-8859-1")起码你知道你传过来的是ISO-8859-1编码啊,才可以这样转换,我传过来的都不知道什么编码了,明明在客户端都已经设置成为utf-8了。你的方法不行了在我这行不通啊、、、、
凉凉二点凉 2013-10-16
  • 打赏
  • 举报
回复
以前做jsp时是这样解决的 String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8"); 应该可以参考下

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧