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.:
Œ+Ü+È+Æ+M+Ū
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;
}
* END EDIT 2
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:
decodeURI(text.split('+').join('%20'))
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.