【问题标题】:Java difference between two URL Encoded strings两个 URL 编码字符串之间的 Java 区别
【发布时间】:2011-08-22 16:53:31
【问题描述】:
以下两个编码字符串有什么区别?
%D0%9E%D0%BA%D0%B6%D1%8D%D0%B7
和
%26%231055%3B%26%231088%3B%26%231080%3B%26%231074%3B%26%231077%3B%26%231090%3B
我正在尝试将俄语文本“Привет” URL 编码为上面的第二个编码字符串(W3Schools encoder 正确),但我使用的 URL 编码器一直给我上面的第一个编码字符串。我正在使用来自 W3 联盟的URLUTF8Encoder.java。我必须使用这个,因为我正在开发一个需要 J2ME 的移动平台。
谢谢!
【问题讨论】:
标签:
java
string
encoding
java-me
utf-8
【解决方案1】:
w3schools 的 URL 编码器完全错误。 %D0%9E%D0%BA%D0%B6%D1%8D%D0%B7 完全有效。这也是我做的时候得到的结果
String encoded = URLEncoder.encode("Привет", "UTF-8");
当我对 w3schools 的答案进行 URL 解码时,如下所示
String decoded = URLDecoder.decode("%26%231055%3B%26%231088%3B%26%231080%3B%26%231074%3B%26%231077%3B%26%231090%3B", "UTF-8");
然后我得到Привет,它们正是那些俄罗斯字符,然后先转换为XML entities。
顺便说一句,w3schools 网站与 W3 Consortium 没有任何关系。另见w3fools。
【解决方案2】:
你的字符串“Привет”被编码为:
%D0%9E
%D0%BA
%D0%B6
%D1%8D
%D0%B7
第二个字符串好像是在url-encoding之前转换成HTML实体的:
%26%231055%3B
%26%231088%3B
%26%231080%3B
%26%231074%3B
%26%231077%3B
%26%231090%3B
%26 是&,%23 是#,%3B 是;:
П
р
и
в
е
т