0

Unicode 文字を含む URL を (正しく) エンコードする Android クラスはありますか? 例えば:

Blue Öyster Cult

java.net.URI を使用して次のように変換されます。

uri.toString()
 (java.lang.String) Blue%20Öyster%20Cult

Ö 文字はエンコードされません。使用URLEncoder:

URLEncoder.encode("Blue Öyster Cult", "UTF-8").toString()
 (java.lang.String) Blue+%C3%96yster+Cult

エンコードしすぎます (つまり、スペースが "+" になり、パス セパレータ "/" が %2F になります)。Dolphin Web ブラウザーで Unicode 文字を含むリンクをクリックすると、正しく動作するので、明らかにこれを行うことができます。しかし、上記の文字列のいずれかを使用して HttpURLConnection を開こうとすると、HTTP 404 Not Found例外が発生します。

4

2 に答える 2

1

URLEncoder は、URI 全体ではなく、フォーム コンテンツのエンコードに使用するように設計されています。/ を %2F としてエンコードするのは、ユーザー入力がディレクトリとして解釈されないようにするためです。+ はフォーム データの有効なエンコードです。(フォーム データ == URI の ? に続く部分)

理想的には、文字列全体をエンコードするのではなく、ベース URI に追加する前に「Blue Öyster Cult」をエンコードします。また、"Blue Öyster Cult" がクエリ文字列の一部ではなくパスの一部である場合は、自分で + を %20 に置き換える必要があります。これらの制限により、URLEncoder は正常に機能します。

于 2013-03-19T22:48:25.560 に答える