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+Ū

  • 所以特殊字符是可以的,但是空格的加号是什么?

我不想在不了解是否有更好的方法或可能遇到的其他问题的情况下手动将“+”替换为“”?

** 编辑: **

我正在尝试查看是否可以处理这个问题,在萤火虫控制台中进行试验。

>>> 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 回答