Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Javascript > Is there anything better than escape()

Reply
Thread Tools

Is there anything better than escape()

 
 
simplicity
Guest
Posts: n/a
 
      12-17-2007
I need to upload the local file to the server site in the environment
where there is no webserver running there, hence no POST method is
available. All I have at the receiving end is the SOAP server which
means that I must send the file as the SOAP message containing textual
representation of bytes, for example:

fileContent = "a b<LF>" must be sent as <data>613262320A</data> where
61 is a hex value of 'a', 32 of SPACE, 62 is 'b', 0A is LF etc

I tried replace() but I am running into a problem of premature end of
array - replace() deals with String types and will do the conversion
to something like "a%32b%0A" (which can be further processed easily to
convert all typable characters by their hex values while stripping %
from non-typable ones) but it will quit on the first accurence of 00
(null) byte and, no need to mention, the binary file will be full of
those.

I can step through the fileContent array one byte at a time and
traverse "special bytes" including null (byte value 0x00) up to the
length of the file I read but I do not know how to determine what
exactly the non-typable characters are, that is I can do mapping

if (content[i] == 'a') concatenate "61" to the SOAP message

but I don't know how I can deal with something like <BEL> character
(byte value 0x07) or any byte value above 0x7F.

Is there a way out of this?
 
Reply With Quote
 
 
 
 
Thomas 'PointedEars' Lahn
Guest
Posts: n/a
 
      12-18-2007
simplicity wrote:
> fileContent = "a b<LF>" must be sent as <data>613262320A</data> where
> 61 is a hex value of 'a', 32 of SPACE, 62 is 'b', 0A is LF etc
>
> I tried replace() but I am running into a problem of premature end of
> array - replace() deals with String types and will do the conversion
> to something like "a%32b%0A"


You mean escape(), not String.prototype.replace(). Both methods operate on
string values.

You are looking for String.prototype.replace(), not escape():

fileContent = '<data>'
+ fileContent.replace(
/[\s\S]/g,
function(m)
{
return m.charCodeAt(0).toString(16).toUpperCase();
})
+ '</data>';

Be sure to escape the `</' as `<\/' when in CDATA content.


HTH

PointedEars
--
Anyone who slaps a 'this page is best viewed with Browser X' label on
a Web page appears to be yearning for the bad old days, before the Web,
when you had very little chance of reading a document written on another
computer, another word processor, or another network. -- Tim Berners-Lee
 
Reply With Quote
 
 
 
 
simplicity
Guest
Posts: n/a
 
      12-19-2007
On Dec 17, 2:56 pm, simplicity <stella_pig...@yahoo.ca> wrote:
> I need to upload the local file to the server site in the environment
> where there is no webserver running there, hence no POST method is
> available. All I have at the receiving end is the SOAP server which
> means that I must send the file as the SOAP message containing textual
> representation of bytes, for example:
>
> fileContent = "a b<LF>" must be sent as <data>613262320A</data> where
> 61 is a hex value of 'a', 32 of SPACE, 62 is 'b', 0A is LF etc
>
> I tried replace() but I am running into a problem of premature end of
> array - replace() deals with String types and will do the conversion
> to something like "a%32b%0A" (which can be further processed easily to
> convert all typable characters by their hex values while stripping %
> from non-typable ones) but it will quit on the first accurence of 00
> (null) byte and, no need to mention, the binary file will be full of
> those.
>
> I can step through the fileContent array one byte at a time and
> traverse "special bytes" including null (byte value 0x00) up to the
> length of the file I read but I do not know how to determine what
> exactly the non-typable characters are, that is I can do mapping
>
> if (content[i] == 'a') concatenate "61" to the SOAP message
>
> but I don't know how I can deal with something like <BEL> character
> (byte value 0x07) or any byte value above 0x7F.
>
> Is there a way out of this?


Thanks Marc and Thomas

Both code samples work like a charm until... well it is probably my
fault that my description of the problem contained errors and was far
from accurate.

First you both caught the erroneous info correctly: of course I want
to convert my sample bytes "a b<LF>" into <data>6120620A</data>, then
I experimented with escape() not replace().

Second, a big mistake I made was when I claimed that "I can (...)
traverse "special bytes" including null (byte value 0x00)". The truth
is: all of them except null. I guess I missed that fact because I
buried that null (byte value 00) close to the end of the file and lost
the count . The reality is that when I put 00 as a first byte, I
read the length of the file as it truly is (in my case study 32 bytes)
but when I read the file into fileContent and step through fileContent
it interprets fileContent[0] = 0 as end of string and every next
fileContent[i] is also returning 0.

As there are only two data types in javascript, strings and numbers,
is there a trick which would allow me to read the file into the array
of numbers which would remove the "special meaning" from all elements
of value 0"? I know what size the file is before I read it, so
allocating the array of correct size will not be a problem.

Stella
 
Reply With Quote
 
Thomas 'PointedEars' Lahn
Guest
Posts: n/a
 
      12-19-2007
simplicity wrote:
> [...] The reality is that when I put 00 as a first byte, I read the
> length of the file as it truly is (in my case study 32 bytes) but when I
> read the file into fileContent and step through fileContent it interprets
> fileContent[0] = 0 as end of string and every next fileContent[i] is also
> returning 0.


See below.

> As there are only two data types in javascript, strings and numbers,


You are mistaken. Read any reference on the language to find the contrary
confirmed.

> is there a trick which would allow me to read the file into the array of
> numbers which would remove the "special meaning" from all elements of
> value 0"? I know what size the file is before I read it, so allocating
> the array of correct size will not be a problem.


The NUL byte (0x00) denotes the end of a character string of variable length
in many formats (but not in ECMAScript strings). Other than that, I don't
know what your file reading problem is, but there is surely no ECMAScript
data type problem: "\x00".charCodeAt(0).toString(16) returns "0".

Of course, when you have to deal with characters at code points below
U+0010, you will have to pad the returned value with "0" in order to have a
proper byte code. And you will have to exclude characters with code points
above U+00FF, unless your XML parser can deal with Unicode code points:

fileContent = '<data>'
+ fileContent.replace(
/[\s\S]/g,
function(m)
{
var cp = m.charCodeAt(0);

if (cp > 0xFF) return "";

var s = cp.toString(16).toUpperCase();

return (s.length < 1) ? "0" + s : s;
})
+ '</data>';


Reader's time and bandwidth are precious. Please trim your quotes to
the minimum required to retain the context of your reply. See also
http://jibbering.com/faq/ pp.


PointedEars
--
Anyone who slaps a 'this page is best viewed with Browser X' label on
a Web page appears to be yearning for the bad old days, before the Web,
when you had very little chance of reading a document written on another
computer, another word processor, or another network. -- Tim Berners-Lee
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
GL2 better than the XLs? Consumer grade HDs better than pro-sumer Mini DVs? dh@. DVD Video 1 08-28-2008 07:20 PM
Is splint really better than lint? Is there a better tool than splint? Peter Bencsik C Programming 2 09-21-2006 10:02 PM
Anything better than Panel control? Shawn Repphan ASP .Net 1 11-01-2005 04:26 PM
Is there anything "better" than impalib/poplib? Alessandro Bottoni Python 1 09-07-2005 02:29 PM
Anything new better than Epson 2200 for quality, speed etc. Flierbk Digital Photography 10 09-20-2003 09:50 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57