Javaでmessageformatを使用するときに、引数内のエンコーディングを保持するにはどうすればよいですか
-
27-10-2019 - |
質問
私は使用しようとしています MessageFormat
次のように、
String downloadsUrl = "http://host/downloads?tags={0}";
Object[] formatArgs = {"sequence%20diagram"};
String url = new MessageFormat(downloadsUrl).format(formatArgs);
ただし、最終的なURL文字列を見ると、http:// host/downloads?tags = sequence 図
%20を保持し、メッセージをスペースに置き換えないようにするための途方はありますか?
解決
あなたが提供したコードは、上記のコードが「http:// host/downloads?tags = sequence%20diagram」を返すスペースを追加しません。
ターゲットサーブレットは代替を行っています。 「/ダウンロード」がマップされるものはすべて、タグパラメーターを解析し、URLデコードを実行します。次のように、可能なエンコーディングを再構築できます。以下のサポートエクセプトを処理する必要があります。
String encoded = URLEncoder.encode( request.getParameter( name ), "UTF8" );
残念ながら、これは可能なエンコードのみであり、デフォルトではスペースを「+」に変換します。 「%20」を取り戻すには、に頼る必要があります
encoding = encoding.replaceAll( "+", "%20" );
これはあなたのために働くかどうか。一般に、デコードされた値ごとに多くの可能なエンコーディングがあるため、エンコードされた値の代わりにデコードされた値を正規化することをお勧めします。
他のヒント
に基づく これ 私は価値の周りに単一の引用を置くことを推測するつもりです...
所属していません StackOverflow