multipart/form-data 当提交表单时,如何指定字符集

jmcooler 2014-06-15 03:34:31
<Form method="POST" enctype="multipart/form-data" accept-charset="utf-8" >
此时,浏览器将隐含以 UTF-8 编码,并提交表单中的键值对。
所谓“隐含”,就是不会在各个 Part 中显示指明 Content-Type: text/plian, charset=utf-8

发出去的内容如下:
Accept-Encoding: gzip,deflate,sdch
Content-Type: multipart/form-data; boundary=boudary

--boudary
Content-Disposition: form-data; name="bobi" //表单键值对

utf-8 编码的文字串
--boudary
Content-Disposition: form-data; name="file" filename="太阳花.jpg"

二进制数据
--boudary--

但是,当表单中如果没有指定 accept-charset="utf-8" 时,对于爬虫程序,就不知道该怎么编码字符串,并提交表单了
其一,我如果按 GB2312 作为默认编码,发中国的网站还好,发国外的网站,人家就不认识
其二、我如果按 utf-8 作为字符串编码,那么我要在上面哪个行位置上告诉服务器我用的是 UTF-8 编码的呢?难道是这里:
Content-Disposition: form-data; name="bobi"
Content-Type: text/plain; charset=utf-8
这样写行不行啊?
...全文
3414 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shine333 2014-06-16
  • 打赏
  • 举报
回复
引用 2 楼 jmcooler 的回复:
需要指出的是,如果 Form 不指定 accept-charset="utf-8" 时,各种浏览器,将默认以 GB2312 编码文本数据,且并不会显示告知服务器用了这个字符集 这会出现问题的。当我往国外网站,提交一段中文文字,而该网站并未在表单里,指定可接受的字符集时,发出去肯定是乱码。 互联网,难道不可以规范一下,当表单不指定字符集时,全都默认采用 utf-8 就好啦。
楼主谁告诉你各种浏览器默认GB2312了 另外,你现在的爬虫用的是什么类库,主要爬的网站又是哪些?
引用 1 楼 jmcooler 的回复:
另外,其中有个 filename="太阳花.jpg" 这里出现了中文,也需要被编码,又该怎么办呢?
文件名有多种编码格式,但是各种浏览器支持的种类不一。不过你是爬虫,理论上服务器应该都支持。 filename=*UTF8''%E5%A4%AA%E9%98%B3%E8%8A%B1.jpg http://stackoverflow.com/questions/93551/how-to-encode-the-filename-parameter-of-content-disposition-header-in-http
tony4geek 2014-06-16
  • 打赏
  • 举报
回复
你加上, <%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
Defonds 2014-06-15
  • 打赏
  • 举报
回复
表单头加上:
<form method="post" enctype="multipart/form-data" acceptcharset="UTF-8" > 
然后使用以下参数启动 jvm:
-Dfile.encoding=UTF-8
Defonds 2014-06-15
  • 打赏
  • 举报
回复
http client 请求? 你这样试试:
Request.setHeader(CoreProtocolPNames.HTTP_CONTENT_CHARSET, Consts.UTF_8);
或者这个:
Request.Post("someurl")
        .useExpectContinue()
        .version(HttpVersion.HTTP_1_1)
        .bodyString("Important stuff", ContentType.create("text/plain", Consts.UTF_8))
        .execute()
        .returnContent().asBytes();
jmcooler 2014-06-15
  • 打赏
  • 举报
回复
我说的,主要是桌面爬虫程序,或者自动提交表单的客户端程序 而非Web服务器如何配置 UTF-8
jmcooler 2014-06-15
  • 打赏
  • 举报
回复
需要指出的是,如果 Form 不指定 accept-charset="utf-8" 时,各种浏览器,将默认以 GB2312 编码文本数据,且并不会显示告知服务器用了这个字符集 这会出现问题的。当我往国外网站,提交一段中文文字,而该网站并未在表单里,指定可接受的字符集时,发出去肯定是乱码。 互联网,难道不可以规范一下,当表单不指定字符集时,全都默认采用 utf-8 就好啦。
jmcooler 2014-06-15
  • 打赏
  • 举报
回复
另外,其中有个 filename="太阳花.jpg" 这里出现了中文,也需要被编码,又该怎么办呢?

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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