首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对Unicode字符进行URL编码的正确方法是什么?

对Unicode字符进行URL编码的正确方法是什么?
EN

Stack Overflow用户
提问于 2009-05-26 21:18:57
回答 3查看 114.9K关注 0票数 115

我知道非标准的%uxxxx方案,但这似乎不是一个明智的选择,因为该方案已经被W3C拒绝了。

一些有趣的例子:

核心人物。如果我在浏览器中键入以下内容:

代码语言:javascript
复制
http://www.google.com/search?q=♥

然后复制并粘贴它,我看到这个URL

代码语言:javascript
复制
http://www.google.com/search?q=%E2%99%A5

这使得火狐(或Safari)看起来正在做这件事。

代码语言:javascript
复制
urllib.quote_plus(x.encode("latin-1"))
'%E2%99%A5'

这是有道理的,除了不能用拉丁语-1编码的东西,比如三重点字符。

代码语言:javascript
复制

如果我键入URL

代码语言:javascript
复制
http://www.google.com/search?q=…

到我的浏览器中,然后复制并粘贴,我会得到

代码语言:javascript
复制
http://www.google.com/search?q=%E2%80%A6

背。这似乎是因为

代码语言:javascript
复制
urllib.quote_plus(x.encode("utf-8"))

这是有道理的,因为…不能用拉丁语-1编码。

但是我不清楚浏览器是如何知道是用UTF-8还是拉丁文-1解码的。

由于这一点似乎很含糊:

代码语言:javascript
复制
In [67]: u"…".encode('utf-8').decode('latin-1')
Out[67]: u'\xc3\xa2\xc2\x80\xc2\xa6'

工作,所以我不知道浏览器如何判断是用UTF-8还是拉丁文-1解码。

如何正确处理我需要处理的特殊字符?

EN

回答 3

Stack Overflow用户

发布于 2009-06-19 22:22:23

IRI (RFC 3987)是取代URI/URL (RFC 3986及更早版本)标准的最新标准。URI/URL本身并不支持Unicode (好吧,RFC 3986为未来的基于URI/URL的协议添加了支持它的条款,但不会更新过去的RFC)。"%uXXXX“方案是在某些情况下允许Unicode的非标准扩展,但并不是每个人都能实现。另一方面,IRI完全支持Unicode,并且要求文本先以UTF-8格式编码,然后再进行百分号编码。

票数 9
EN

Stack Overflow用户

发布于 2010-04-14 13:31:36

IRI不会取代URI,因为在某些上下文中只允许使用URI(实际上是ASCII) --包括HTTP。

相反,您可以指定一个IRI,当连接到网络上时,它将转换为URI。

票数 6
EN

Stack Overflow用户

发布于 2009-05-27 16:08:33

第一个问题是你的需求是什么?UTF-8编码是使用廉价编辑器创建的文本和支持多种语言之间的一个很好的折衷方案。关于浏览器识别编码的问题,响应(来自web服务器)应该告诉浏览器编码。尽管如此,大多数浏览器都会尝试猜测,因为在许多情况下,这要么是缺失的,要么是错误的。他们通过读取一定数量的结果流来猜测是否存在不适合默认编码的字符。目前所有浏览器(?我没有检查这一点,但它非常接近于真)使用utf-8作为默认值。

因此,除非您有令人信服的理由使用许多其他编码方案中的一种,否则请使用utf-8。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/912811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档