对unicode字符进行URL编码的常用方法是将其拆分为2%的HH代码。 ( \ u4161 => %41%61 )
但是,解码时如何区分unicode?你怎么知道%41%61 \ u4161 与 \ x41 \ x61 (“Aa”)?
需要编码的8位字符是否以%00 开头?
或者,unicode字符应该丢失/拆分吗?
答案 0 :(得分:7)
根据Wikipedia:
当前标准
通用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方法的人......标准不是很有趣吗?
答案 1 :(得分:0)
我一直在做的是首先UTF-8编码一个Unicode字符串,使其成为一系列8位字符,然后再转义那些带有%HH的。
P.S。 - 我只能希望非标准实现(%uxxxx)很少而且很远。
答案 2 :(得分:0)
由于URI是在unicode出现之前引入的,或者至少是广泛使用的,我想这是一个非常具体的实现问题。 UTF-8对你的文本进行编码,然后根据正常情况进行转义听起来像是最好的想法,因为它完全向后兼容任何ASCII / ANSI系统,尽管你可能会得到奇怪的一两个字符。
另一方面,要进行解码,您可以浏览文本,并获得UTF-8字符串。如果使用较旧系统的某人试图以ASCII / ANSI发送一些数据,那么就没有任何损害,那就是(差不多)已经编码过UTF-8了。