代码区项目交易流程

Encoding issues posting from Android app to Nodejs server, plusses for spaces af ...


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教程

点击收藏

LAST JavaScript tutorial: Get started with generative art and P5.js 用js写卡牌游戏(一) NEXT