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+

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.

* END EDIT 2

Problem courtesy of: Dave

Solution

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.

Solution courtesy of: Kevin Busse

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

分页:12
转载请注明
本文标题:Encoding issues posting from Android app to Nodejs server, plusses for spaces af ...
本站链接:https://www.codesec.net/view/628201.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 前端(javascript) | 评论(0) | 阅读(25)