Javaでmessageformatを使用するときに、引数内のエンコーディングを保持するにはどうすればよいですか

StackOverflow https://stackoverflow.com/questions/8345796

  •  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" );

これはあなたのために働くかどうか。一般に、デコードされた値ごとに多くの可能なエンコーディングがあるため、エンコードされた値の代わりにデコードされた値を正規化することをお勧めします。

他のヒント

に基づく これ 私は価値の周りに単一の引用を置くことを推測するつもりです...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top