说一说 HTTP 接口中的内容编码问题

红薯 发布于 2013/12/23 19:56
阅读 878
收藏 8

先让我们看一个接口:

http://www.lagou.com/joinNov/ex_list_oschina?status=%E6%8A%80%E6%9C%AF

用浏览器访问这个接口的时候显示的是乱码,但是手工将浏览器的编码切换为 UTF-8 就能显示正常。

也就是说浏览器无法识别这个接口返回的数据到底是什么编码,那到底为什么会出现这种问题呢?

大家先看看这个接口返回的数据头包含什么信息:

winter$ curl -I http://www.lagou.com/joinNov/ex_list_oschina?status=%E6%8A%80%E6%9C%AF
HTTP/1.1 200 OK
Server: nginx/1.2.8
Date: Mon, 23 Dec 2013 11:55:37 GMT
Content-Length: 2467
Connection: keep-alive

发现没,服务器端并没有告诉浏览器我所返回的内容是什么格式的编码,是什么样的 Content-Type。

你可能会说作为接口没问题啊,别人读取数据按 UTF-8 来处理就可以了。你要是能这样将就的话,那的确是没问题,也可以使用。

但是只需要简单的给这个接口设置一个 Content-Type 的 HTTP 响应头就可以了

Content-Type: application/json; charset=UTF-8

举手之劳的事情,就可以让自己变得更专业一些。或许通过这么一个小例子你会发现,哦,原来 HTTP 协议是这么工作滴。

加载中
0
no_user
彭博
彭博
回复 @尾部大湿 : 太不容易了...
no_user
no_user
拍了半个小时p了半小时,头像上传了,加个分吧。
红薯
红薯
建议换个头像吧
0
枫爱若雪
枫爱若雪
红薯你这事高端黑啊,谁又惹你了?
0
雷毅
雷毅

两次看到红薯受编码折磨了

URL中的%,也有不少包GB码的,是个麻烦。辨别方式是只有当字节数是3的倍数且第1、4、7……个字节是%Ex、第2、3、5、6、8、9……个字节是%8x~%Bx的才可能是UTF8,否则是GB字符

我写过一个编码的小工具,适合编码转换和字符集编码原理教学用,vc++6写的,发到osc你帮我推荐吧

tsl0922
tsl0922
回复 @雷毅 : 公开项目clone不需要登陆,但是push还是需要密码的。
tsl0922
tsl0922
回复 @雷毅 : 如果是私有项目是需要登陆的,公开项目不需要。
红薯
红薯
@雷毅 兄弟,你最好重开新帖,否则我们的 git 兄弟们看不到你的问题:)
雷毅
雷毅
@tsl0922 我用的git命令行工具是 clearos-core里面的 git 1.7.1-3.el6_4.1,监听了一下,服务器返回401以后就给我报虾米了。以前没干过需要登录的git
雷毅
雷毅
回复 @红薯 : 不沾两套密码的事。是redhat rpm 安装的git-1.7.1,一路就没找到帐户密码的地点,OSC的提交帮助里也没有,我好受打击
下一页
0
mallon
mallon
这个貌似是常识吧
Z
ZhangKevin2
那是基础知识不牢固 文件编码 页面编码 数据库编码三码合一基础
红薯
红薯
问题是很多人对这种常识不以为然
0
黄亿华
黄亿华
嗯嗯,webmagic里会读content-type头,但是也很多人反映页面乱码。看来浏览器都乱码,我有什么办法…
宅男小何
宅男小何
检测下meta里面的charset
0
MrZQ
MrZQ
弱弱的问下Content-Type好像没有“text/javascript”吧,是不是应该为“text/html”或者“text/plain”。 :)
红薯
红薯
当然有的:)
0
萌龙
萌龙

引用来自“MyKings”的答案

弱弱的问下Content-Type好像没有“text/javascript”吧,是不是应该为“text/html”或者“text/plain”。 :)
application/x-javascript
0
tuzibuluo
tuzibuluo
编码是服务器设置还是客户端IE或者html,jsp里设置??
返回顶部
顶部