1

エンコーディングの問題は初めてですが、自分が行っていることが正しくないのか、得られた結果を回避する必要があるのか​​わかりません。

私のAndroidアプリで、誰かが「3ËÆŒØĪ」というテキストを追加したとします。

これをマルチパートフォームの投稿でノードサーバーにアップロードする前に、次のことを行います。

    textOneUTF = URLEncoder.encode(textFieldText, "UTF-8");

ログアウトすると、エンコード前とエンコード後のテキストは次のようになります。

BEFORE ENCODE: 3 Ë Æ Œ Ø Ī
3+%C3%8B+%C3%86+%C5%92+%C3%98+%C4%AA

それは私のノードサーバーに投稿されました。

サーバーでは、次のことを行います。

 if(req.body.textone) {
  textOne = decodeURIComponent(req.body.textone);
 }

(私もdecodeURIを試しました。)

しかし、すべてがプラスとしてスペースで出てきています、例えば:

Œ+Ü+È+Æ+M+Ū

  • 特殊文字は問題ありませんが、スペースのプラスはどうですか?

より良い方法や他の問題が発生する可能性があるかどうかを理解しようとせずに、手動で「+」を「」に置き換えたくありませんか?

** 編集: **

私はこれに対処できるかどうかを確認しようとしています。Firebugコンソールで実験しています。

>>> boop = "%2B%2B%C3%86%40%23%C2%A3%25%26+%C5%92SS%C3%83%2B++%2B++++%2B%23%C5%92";

"%2B%2B%C3%86%40%23%C2%A3%25%26+%C5%92SS%C3%83%2B++%2B++++%2B%23%C5%92"

>>> boop.replace(/\+%2B/g," " );

"%2B%2B%C3%86%40%23%C2%A3%25%26+%C5%92SS%C3%83%2B+ +++ %23%C5%92"

>>> console.log(decodeURIComponent(boop));

++Æ@#£%&+ŒSSÃ+++++++++#Œ

...最初に+%2Bスペースを文字列で置き換えてから、残りの文字列をデコードすることはできません。また、最初にデコードを行うこともできません。助言がありますか?

**/編集終了**

**編集2**

今のところ、私はこの関数でこれを解決しています:

function decodeTextSring(text) {

  var textfinished = "";
if(text.indexOf("+") != -1) {
  textSplit = text.split("+");

  for(i=0; i < textSplit.length; i++) {
    if(textSplit[i+1] != null) {
    textfinished += decodeURIComponent(textSplit[i]) + " ";
  }
  else {
    textfinished += decodeURIComponent(textSplit[i]);
  }
  }
}
else {
  textfinished = decodeURIComponent(text);
}

return textfinished;


}
  • したがって、+を分割して、Javaエンコードが追加し、文字列の各ビットをデコードし、スペースがある場合はスペースを使用して再アセンブルします。

*編集2を終了

4

1 に答える 1

0

スペースに文字を使用すること+は、それ以外の場合は としてエンコードされるスペースの簡略表記です%20。これは私が知っている唯一の簡略表記であり、奇妙なことに、エンコードされた URI コンポーネントを元に戻す直接的な方法はありませんが、次の方法でそのようなことを実現できます。

decodeURI(text.split('+').join('%20'))

decodeURI('3+%C3%8B+%C3%86+%C5%92+%C3%98+%C4%AA'.split('+').join('%20'))結果は3 Ë Æ Œ Ø Ī; 私が想定しているのは、あなたが探しているものです。

于 2013-03-16T00:12:58.137 に答える