URL编码问题

此部分参考英文资料:

  • http://www.blooberry.com/indexdot/html/topics/urlencoding.htm
  • http://www.w3schools.com/TAGS/ref_urlencode.asp
  • http://www.rfc-editor.org/rfc/rfc2396.txt

在HTTP客户端使用get方法通过URL向服务器发送参数里,由于URL里面只可以包含允许的字符(也称为合法字符),所以一旦参数里面存在非法字符,就必须通过某种手段对其进行合法化转换,在服务器端再将其转换回来,

在RFC1738:Uniform Resource Locators (URL) 规范中,指出URL只能包含AscII集中的一个子集中的字符,这个子集也称作AscII character-set,原文写道:

"...Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!*'()," [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL."

实际上URL规范中,字符包括保留字符,非保留字符两种,RFC2396中定义了URL中的保留(reserved)字符为:

Reservedreserved    = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
                    "$" | ","
非保留字符为: Unreservedunreserved  = alphanum | mark

mark        = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"

实际上非保留字符就是AscII character-set,此集合之外的字符都被称为非法字符(invalid character)或不安全字符(unsafe character),这些字符都将被编码转换为合法字符(valid character)或叫安全字符(safe charactor),转换的动作在英文常表示为escape。

escape的方式如下规范中所述:

Escaped EncodingAn escaped octet is encoded as a character triplet, consisting of the
   percent character "%" followed by the two hexadecimal digits
   representing the octet code. For example, "%20" is the escaped
   encoding for the US-ASCII space character.

escaped     = "%" hex hex
      hex         = digit | "A" | "B" | "C" | "D" | "E" | "F" |
                            "a" | "b" | "c" | "d" | "e" | "f"

转换时使用的字符集为ISO-8859-1也称为ISO-Latin或Latin-1,注意不是Unicode,这就引起了新的问题,对于不在ISO-Latin中的符号,就没有一个安全的途径进行编码,因为根据RFC2396(注意这是URI规范,但是对URL适用,因为URL是URI的子集,有兴趣的读者请查阅URL和URI之间的关系),URL里还无法指定自定义的字符集(比如UTF-8)。

虽然根据标准,在URL中我们无法使用非ISO-Latin字符集以外的字符,但是在现实中,为了解决实际问题,大家都有事实上的标准那就是Unicode编码,现行的为UTF-8,现在浏览器都支持UTF-8的URL编码转换,当然,这个时候的转换动作不再叫escape,而是称为URIEncode。另外,UTF-8与Latin-1是兼容的,相关的信息可参考:

  • http://www.stanford.edu/~laurik/fsmbook/faq/utf8.html
  • http://baike.baidu.com/view/25412.htm
  • http://www.permadi.com/tutorial/urlEncoding/

PHP与Javascript相关的URIEncode操作请参见:http://blog.verymore.com/show-989-1.html

GWT的URL编码与解码

使用URL类中的静态方法URL.decode 和 URL.encode来进行。

java.lang.Objectcom.google.gwt.http.client.URL  
Method Summary
static java.lang.String decode(java.lang.String encodedURL) 
          Returns a string where all URL escape sequences have been converted back to their original character representations.
static java.lang.String decodeComponent(java.lang.String encodedURLComponent) 
          Returns a string where all URL component escape sequences have been converted back to their original character representations.
static java.lang.String encode(java.lang.String decodedURL) 
          Returns a string where all characters that are not valid for a complete URL have been escaped.
static java.lang.String encodeComponent(java.lang.String decodedURLComponent) 
          Returns a string where all characters that are not valid for a URL component have been escaped.

GAE4Java的编码与解码

实际上,由于写本文的初衷是作者在这个环境下开发程序时想理清这个问题,所以将服务器环境定位为GAE,实际上就是Java下的URL编码问题,可以参考:http://china.manufacturer.com/article/study_for_character_encoding_java.htm。

Java中URI Encoding的相关类为URLEncoder,URLDecoder

示例:

1 String text = java.net.URLEncoder.encode("编码转换", "utf-8");

java.lang.Object
java.net.URLEncoder

Method Summary
static String encode(String s, String enc)
          使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式。

URLDecoder此处略去,同上。

【完】

转载于:https://www.cnblogs.com/dengfanxin/archive/2009/04/16/GAE_UrlEncoding.html

Google App Engine for Java下的URL编码转换问题相关推荐

  1. google app engine for java 的web应用程序

    在IT业步入"云"时代的时候,Google App Engine无疑是引领"云"技术潮流的一支生力军.但在App Engine诞生后的很长一段时间里,它都只支持 ...

  2. java的app构建代码_适用于Java的Google App Engine,第2部分,构建杀手级应用

    java的app构建代码 存档日期:2019年5月14日 | 首次发布:2009年8月11日 像Google App Engine for Java™这样的云平台的全部要点是能够想象,构建和部署可扩展 ...

  3. 探索Google App Engine背后的奥秘

    探索Google App Engine背后的奥秘(1)--Google的核心技术 作者: ikewu | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及 版权声明 网址: http://w ...

  4. Google App Engine教程

    Google App Engine是一个用于在现有Google基础架构中托管Web应用程序的云计算平台,它易于扩展,管理和免费使用多达预定义的已消耗资源,并且支持Java. 有关其他费用,请参阅此GA ...

  5. 谁更胜一筹:技术解析 Google App Engine 和 Amazon EC2

    最近一个潜在客户要求我们比较一下 Amazon EC2 和 Google App Engine,正好我们刚刚在 EC2 和 Google App Engine 上完成了两个相对来说规模较大的项目,因此 ...

  6. Google App Engine对抗Amazon EC2谁更牛?

    导读:笔者根据最近完成的一个项目,并帮助潜在客户比较Amazon EC2和Google App Engine,他将从三个角度来对比这两大云计算平台:技术.业务和未来发展趋势. 关键词:Amazon E ...

  7. 通过google app engine 在google cloud 部署支持quic的Java web 应用(多种方式)

    quic最先是由google提出并完善的,18年google cloud支持了quic协议,我尝试在google上部署一套自己的应用,并使其支持quic协议 google的文档还是非常完善的,只是类似 ...

  8. Google App Engine Java功能和命名空间API

    功能API 使用Capabilities API,您的应用程序可以检测特定API功能的停机和计划停机时间. 您可以使用此API来检测应用程序何时不可用,然后绕过它来减少应用程序的停机时间. 我们该如何 ...

  9. java与java ee_CapeDwarf – Java EE上的Google App Engine

    java与java ee 我有很多爱好. 从早期的Java EE规范一路走来,并用Java EE 7进行了"云"之旅,我很好奇看到新宣布的CapeDwarf项目有什么库存,可以在内 ...

最新文章

  1. 紧随时代发展 安防消费也在悄然发生改变
  2. ZOJ1027 Travelling Fee(DP+SPFA)
  3. Facebook 最新力作 FBNetV3来了!相比 ResNeSt 提速 5 倍,精度不输 EfficientNet
  4. 【JS 逆向百例】Fiddler 插件 Hook 实战,某创帮登录逆向
  5. CV中的经典网络模型
  6. 手把手实现一条延时消息
  7. 虚拟机linux挂载光盘显示:mount: you must specify the filesystem type
  8. windows和linux没有启动选择,重装Windows后,LILO启动选单不见了,无法进入Linux系统怎么办...
  9. python计算机中丢失api-ms-win-crt-runtime-l_api-ms-win-crt-runtime-l1-1-0.dll
  10. 老用户们,苹果没有忘了你们!
  11. C++基础之类的定义和对象的创捷,什么是类和对象?
  12. 广州数控车床M代码指令讲解
  13. PowerBuild安装不了怎么办?
  14. 时域和频域和频谱的关系
  15. 计算机内存不足 无法使用,电脑内存不足怎么办,教您解决电脑内存不足
  16. Word 2010页眉页脚从某一页开始
  17. word文档中把几个图形组合在一起
  18. 超市管理系统-1(JavaSwing和Oracle数据库)
  19. 我的世界服务器怎么弄领地语言,我的世界领地指令权限大全 我的世界领地指令设置教程...
  20. PS制作渐变金属文字

热门文章

  1. EMIF的两个接口EMIFA和EMIFB分析与比较
  2. Verilog中inout端口的使用方法
  3. window python输入路径问题--转义字符
  4. jittor和pytorch生成网络对比之bggan
  5. 大话中文文本分类之TextRNN_ATT
  6. pytorch 保存网络的时候值得注意的事情
  7. [剑指offer] 字符流中第一个不重复的字符
  8. 独角兽之名:解读华云数据背后智慧商业谋略
  9. Flash中文字体嵌入终极解决方案
  10. 线性表的链式表示——循环链表