对unicode字符进行URL编码的常用方法是将其拆分为2%的HH代码。 ( \ u4161 => %41%61

但是,解码时如何区分unicode?您如何知道%41%61 \ u4161 \ x41 \ x61 (" Aa")?

需要编码的8位字符是否以%00 开头?

或者,unicode字符应该丢失/拆分吗?

有帮助吗?

解决方案

根据维基百科

  

当前标准

     

通用URI语法要求新的URI方案   提供表示   URI中的字符数据必须在   效果,表示来自的人物   没有翻译的无保留集,   并且应该转换所有其他   根据字符到字节   UTF-8,然后对它们进行百分比编码   值。这个要求是   2005年1月推出   RFC 3986的发布.URI方案   在此日期之前介绍的不是   影响。

     

当前没有解决   规范是如何处理的   编码的字符数据。例如,   在计算机中,字符数据显示   以编码的形式,在某种程度上,和   因此可以被视为二元   数据或作为字符数据   映射到URI字符。想必,   这取决于URI方案   规范来解释这一点   可能性并要求一个或一个   其他,但在实践中,很少,如果有的话,   实际上。

     

非标准实施

     

存在非标准编码   对于Unicode字符:%uxxxx,其中   xxxx是表示为的Unicode值   四个十六进制数字。这种行为   没有任何RFC指定并具有   被W3C拒绝了。第三   ECMA-262的版本仍然包括   使用它的escape(string)函数   语法,还有一个encodeURI(uri)   转换为UTF-8和的函数   百分比编码每个八位字节。

所以,看起来完全取决于编写unncode方法的人......标准不是很有趣吗?

其他提示

我一直在做的是首先UTF-8编码一个Unicode字符串,使其成为一系列8位字符,然后再转义那些带有%HH的

P.S。 - 我只能希望非标准实现(%uxxxx)很少而且很远。

由于URI是在unicode出现之前引入的,或者至少是广泛使用的,我想这是一个非常具体的实现问题。 UTF-8对你的文本进行编码,然后根据正常情况进行转义,这听起来像是最好的主意,因为它完全向后兼容任何ASCII / ANSI系统,尽管你可能会得到奇怪的一两个字符。

另一方面,要进行解码,您可以浏览文本,并获得UTF-8字符串。如果使用较旧系统的某人试图以ASCII / ANSI发送一些数据,那么就没有任何损害,那就是(差不多)已经编码过UTF-8了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top