导航:首页 > 编程语言 > javapost请求编码格式

javapost请求编码格式

发布时间:2023-11-11 09:48:55

java https请求 中文乱码问题

尝试的方法:
1. 在服务端接收到参数时,utf-8转gbk,无效。
2. 在服务端接收到参数时,iso-8859-1转gbk,无效。
3. 在发送请求前将中文参数转码,utf-8转iso-8859-1,无效。代码如下:
new String(remark.getBytes(“UTF-8”), “ISO-8859-1”)
4. 在请求端,HttpHeader设定ContentType为“application/json;UTF-8”,无效。代码如下:
headers.setContentType(Media.valueOf(“application/json;UTF-8”));
写到这里,有人应该感觉到这有点“病急乱投医”的感觉了,没有头绪地在试着各种方式。是的,起初我觉得是请求header中采用了ISO-8859-1的编码,但尝试后很显然不是;后来我觉着是否是RestTemplate中采用的HttpMessageConverter方式所决定的,但没能找到很好的证明方式,查资料说的是StringHttpMessageConverter默认采用的是ISO-8859-1编码,可我觉得我指定了ContentType为application/json,RestTemplate不应该去调用StringHttpMessageConverter啊,其中的原理还有待深究。个人感觉这种情况出问题的可能性最大。
最后,在网上看到一篇文章后,看了一种建议方式,并且是可行的,就是使用URLEncode,将中文参数在传参前进行encode.这里以GBK编码是为了在服务器端接收参数后无需再转码了,如下:
list.add(URLEncode.encode(name, “GBK”));
URLEncode方式可以解决这种特定场景的中文乱码问题,相信理解其原理后还可以运用到更多的场景。目前我在网上看到的,关于用URLEncode处理中文乱码最多的场景就是文件下载时中文文件名乱码。

⑵ Java 修改编码格式的几种方式

主要分response的字节字符输出流和接受中文参数doGet(),doPost()的设置四种.以及从服务器下载文件到浏览器的编码问题.
都是我学习java时总结的,希望能帮到你.
response的字节输出流:
// 设置浏览器默认打开的时候采用的字符集编码
response.setHeader("Content-Type", "text/html;charset=UTF-8");
// 设置中文转成字节数组的时候取出的编码
response.getOutputStream().write("如果不设置编码,这里就是乱码".getBytes("UTF-8"));
response的字符输出流:
//设置浏览器默认打开的时候采用的字符集编码,response的字符流的缓冲区的编码.
response.setContentType("text/html;charset=UTF-8");
response.getWriter().println("中文");
request的doGet()编码解决:
String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
System.out.println("GET方式:"+name);
request的doPost()编码解决:
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
System.out.println("POST方式:"+name);
下载文件时浏览器编码问题:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.接收参数
String filename = new String(request.getParameter("filename").getBytes("ISO-8859-1"),"UTF-8");
System.out.println(filename);
// 2.完成文件下载:
// 2.1设置Content-Type头(获取文件的mime类型)
String type = this.getServletContext().getMimeType(filename);
//设置文件的mime类型
response.setHeader("Content-Type", type);
// 2.3web项目文件的绝对路径
String realPath = this.getServletContext().getRealPath("/download/"+filename);
// 获得浏览器的类型处理中文文件的乱码问题.(User-Agent:服务器收到客户端版本之类的一些信息)
String agent = request.getHeader("User-Agent");
System.out.println(agent);
if(agent.contains("Firefox")){
filename = base64EncodeFileName(filename);
}else{
//IE谷歌编码
filename = URLEncoder.encode(filename,"UTF-8");
}
// 2.2设置Content-Disposition头(固定写法,让浏览器必须下载,不能直接打开)
response.setHeader("Content-Disposition", "attachment;filename="+filename);
//获得文件
InputStream is = new FileInputStream(realPath);
// 获得response指定的方法获取输出流:如果用其他流是直接拷贝而不是下载
OutputStream os = response.getOutputStream();
int len = 0;
byte[] b = new byte[1024];
while((len = is.read(b))!= -1){
os.write(b, 0, len);
}
//响应流可以不关,在服务器做出相应后服务器会自动把response获得的流关闭
is.close();
}
//火狐
public static String base64EncodeFileName(String fileName) {
BASE64Encoder base64Encoder = new BASE64Encoder();
try {
return "=?UTF-8?B?"
+ new String(base64Encoder.encode(fileName
.getBytes("UTF-8"))) + "?=";
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}

⑶ java post请求参数怎么写

//serverURL url地址
HttpPost httpPost = new HttpPost(serverURL);
//param 为参数
StringEntity entity = new StringEntity(param);
entity.setContentType("application/x-www-form-urlencoded");
httpPost.setEntity(entity);
HttpResponse httpResponse = httpClient.execute(httpPost);

还可以用map作为参数
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
if(param!=null){
Set set = param.keySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
Object key = iterator.next();
Object value = param.get(key);
formparams.add(new BasicNameValuePair(key.toString(), value.toString()));
}
}

⑷ java调http接口 post方式请求 服务器识别全是乱码 服务器识别utf-8的内容 哪位大神知道怎么解决吗

/**
*POST方式请求
*
*@paramuri
*服务器的uri要用物理IP或域名,不识别localhost或127.0.0.1形式!
*@paramparamMap
*@paramheaders
*@return
*@throwsClientProtocolException
*@throwsIOException
*/
publicstaticStringpost(Stringuri,Map<String,String>paramMap,
Map<String,String>headers)throwsClientProtocolException,
IOException{
HttpPosthttpPost=newHttpPost(uri);
if(headers!=null){
for(Stringkey:headers.keySet()){
httpPost.setHeader(key,headers.get(key));
}
}
List<NameValuePair>params=newArrayList<NameValuePair>();
if(paramMap!=null){
for(Stringkey:paramMap.keySet()){
params.add(newBasicNameValuePair(key,paramMap.get(key)));
}
httpPost.setEntity(newByteArrayEntity(paramMap.get("reqData").getBytes("UTF-8")));
// httpPost.setEntity(newUrlEncodedFormEntity(params,
// DEFAULT_ENCODING));
}
HttpResponsehttpResponse=newDefaultHttpClient().execute(httpPost);
intstatusCode;
if((statusCode=httpResponse.getStatusLine().getStatusCode())==200){
returnEntityUtils.toString(httpResponse.getEntity());
}
thrownewIOException("statusis"+statusCode);
}

publicstaticStringpost(Stringuri,StringcontentType,Stringcontent)
throwsException{
org.apache.commons.httpclient.HttpClientclient=neworg.apache.commons.httpclient.HttpClient();

PostMethodpost=newPostMethod(uri);

RequestEntityentity=newStringRequestEntity(content,contentType,DEFAULT_ENCODING);
post.setRequestEntity(entity);

intstatusCode=client.executeMethod(post);
if(statusCode==200){
returnpost.getResponseBodyAsString();
}
thrownewIOException("statusis"+statusCode);
}

你可以设置下他的默认传递代码方式:DEFAULT_ENCODING 为UTF-8

⑸ JAVA WEB 的get和post分别是什么格式

GET 是在URL路径直接拼来接参自数的形式进行的实现,也就是说数据是暴露在请求地址的,并且长度不能太长,通常文件流等实现起来有困难。
POST是只能看见请求的地址,其余的参数是直接在浏览器内部进行的显示和响应,数据相对来说是不暴露的,更安全一些,并且可以传输大量数据。

备注:通过以上说明,推荐实际应用中用Post请求进行开发。

⑹ 如何解决 Java 构造 HTTP 请求 POST 的返回值是乱码

对返回结果使用适当的编码格式,比如

newInputStreamReader(urlConn.getInputStream(),"gbk");//设置编码

⑺ 如何发post请求 内容为json格式 java

一般这种发送请求的话,前端可以使用ajax,写上post的方式,前端将对象转成json的格式.

⑻ java http post 怎么设置 raw格式

调试微信推广支持中二维码生成api的接口,使用chrome浏览器的postman插件,post请求时有一个选项是form-data,或者raw,使用raw可以请求成功,from-data不知道怎么组装key和value所以一直失败。非常不明白raw是什么意思,google网络都没有相关的解释。后来研究发现,其实raw方式使用的是纯字符串的数据上传方式,所以在POST之前,可能需要手工的把一些json/text/xml格式的数据转换成字符串,是一种post原始请求,区别于form-data这种常用的key-value方式。
public static String result; public static void httpTest() throws ClientProtocolException, IOException { String token = "XRhjxAJZG3rFlPLg"; String url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" + token; String json = "{"action_name":"QR_LIMIT_SCENE","action_info":{"scene":{"scene_id":234}}}"; HttpClient httpClient = new DefaultHttpClient(); HttpPost post = new HttpPost(url); StringEntity postingString = new StringEntity(json);// json传递 post.setEntity(postingString); post.setHeader("Content-type", "application/json"); HttpResponse response = httpClient.execute(post); String content = EntityUtils.toString(response.getEntity()); // Log.i("test",content); System.out.println(content); result = content; }

以上代码中需要导入

import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils;

Android中自带org.apache.http相关库文件,所以可以快捷键(ctrl+shift+o)一次导入成功。

⑼ java web项目 在linux服务器发送http post请求 中文乱码

在进行post方式提交的时候,写上request.setCharacterEncoding("UTF-8");
记住要在request设置提交参数之前设置字符编码

祝:生活愉快

⑽ java post网页后接收的汉字是unicode字符集 很急 在线等

你是否在windows上跑的呢来?如果是的话,你的输源出也需要使用编码:

///PrintWriterout=newPrintWriter(conn.getOutputStream()));
//增加输出流的字符编码
PrintWriterout=newPrintWriter(conn.getOutputStream(),"UTF-8");

如果你的后台使用servlet容器,你还需要在servlet里面加上。

request.setCharacterEncoding("UTF-8")
阅读全文

与javapost请求编码格式相关的资料

热点内容
内存清理工具formac 浏览:323
iphone过滤骚扰电话 浏览:981
wap网络如何使用微信 浏览:699
手机迅雷应用盒子在哪个文件夹 浏览:351
windows8网络连接 浏览:442
怎么快速增加qq群人数 浏览:919
锤子视频播放器文件不存在 浏览:707
苹果手机怎么清理app缓存 浏览:682
花园战争2豪华升级包 浏览:517
电脑无法向u盘传输文件 浏览:823
bpn配置文件 浏览:932
501完美越狱工具 浏览:119
中间夹菜单里面不能显示压缩文件 浏览:952
如何指导小学生参加编程比赛 浏览:275
物业的招标文件有哪些 浏览:452
保存游戏文件名非法或只读 浏览:258
js怎么做图片时钟 浏览:451
华为应用里面有了app说明什么 浏览:801
数据库中xy是什么意思 浏览:893
u盘打不开提示找不到应用程序 浏览:609

友情链接