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