I'm new to encoding issues and I'm not sure if what I'm doing is incorrect or I need to work around the results I get.

In my android app, lets say someone adds some text "3 "

Before uploading this to my node server in a multipart form post, I do the following:

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

I log them out and here's what the text looks like pre & post encode:

BEFORE ENCODE: 3 3+%C3%8B+%C3%86+%C5%92+%C3%98+%C4%AA

That's posted to my node server.

On the server, I do:

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

(I also tried decodeURI.)

But everything is coming out with spaces as plusses, e.g.:


so the special characters are ok, but what's with the plusses for spaces?

I don't want to manually replace "+" with a " " without trying to understand if there is a better method or other problems I could encounter?

** EDIT: **

I'm trying to see if I can deal with this, experimenting in firebug console.

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

...you can't string replace the +%2B spaces first and then decode the rest of the string, and you can't do the decode first either. Any suggestions?

** /END EDIT **

** EDIT 2**

For now I'm solving this with this function:

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; } so split on the +'s the java encode adds, decode each bit of the string, and reassemble with spaces if there are any.


Problem courtesy of: Dave


Using the + characters for the spaces is just a short hand notation for the spaces which otherwise would be encoded as %20 . This is the only short hand notation I know of and oddly enough there is no direct method to revert your encoded URI component, but you can achieve such thing with:


For decodeURI('3+%C3%8B+%C3%86+%C5%92+%C3%98+%C4%AA'.split('+').join('%20')) the result is 3 ; which I'm assuming is what you are looking for.

Solution courtesy of: Kevin Busse

本文前端(javascript)相关术语:javascript是什么意思 javascript下载 javascript权威指南 javascript基础教程 javascript 正则表达式 javascript设计模式 javascript高级程序设计 精通javascript javascript教程

本文标题:Encoding issues posting from Android app to Nodejs server, plusses for spaces af ...

技术大类 技术大类 | 前端(javascript) | 评论(0) | 阅读(25)