Re: Problem with encoding a character

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance



I worked it out...

I realised it was the byte length that was required rather than the string
length, as without the pound symbol, everything worked. (I did work this out
before I saw this post, but was unable to apply it immediately to test)

objRequest.ContentLength is now...
objRequest.ContentLength =
System.Text.ASCIIEncoding.UTF8.GetByteCount(strPost);

So, while it wasn't specifically encoding the string, it is getting the
correct length.

--
Best regards,
Dave Colliver.
http://www.AshfieldFOCUS.com
~~
http://www.FOCUSPortals.com - Local franchises available


"Peter Duniho" <no.peted.spam@xxxxxxxxxxxxxxxxxx> wrote in message
news:op.u0behjhvvmc1hu@xxxxxxxxxxxxxxxxxxxx
On Tue, 15 Sep 2009 12:27:49 -0700, David
<david.colliver.NEWS@xxxxxxxxxxxxxxxxxxxxxxx> wrote:

Hi Peter,

That code sample is a full sample, apart from the URL and sign-in
details. I
am not sure what else I can show.

Here are some links you may find helpful:
http://www.yoda.arachsys.com/csharp/complete.html
http://www.yoda.arachsys.com/csharp/incomplete.html
http://sscce.org/ (some Java-centric stuff, but mostly applicable to any
programming questions)

It is actually failing in the finally, the myWriter.Close().

As the references above will point out, part of asking a good question is
providing accurate information regarding what's failing.

I am also speaking with the SMS people to come to a solution. I have
figured
that it is down to the byte length, not the character length. Basically,
the
pound symbol is looking like 2 bytes instead of 1. I know this appears
to be
happening, as when I change the ContentLength by adding one (+ 1), the
pound
symbol goes through.

In other words, your problem very well may be caused by the problem I
noted in my previous post: that you are setting the ContentLength property
incorrectly by providing character length instead of byte length.

It was the text in the error message that gave me that clue and also the
stepping through and seeing it fail on the finally, without even being
caught by the catch. With the error message stating that it can't close
until all bytes are sent, it was the realisation that the pound sign £
must
be two bytes instead of one, as without the symbol, everything worked
hunky
dory.

I thought the pound sign was a unicode character, but when I tried to
change
it to unicode in the opening of the myWriter, it still failed.

The pound sign, in and of itself, neither is nor is not a Unicode
character. It is simply a specific glyph, referenced in some character
encodings as a specific character code. Some character encodings include
the character, some do not. If you want to represent the pound sign, you
have to use an encoding that supports that character. And yes, in some of
those encodings (the Unicode encodings, for example) the pound sign will
be more than one byte.

I don't know what you mean by "tried to change it to unicode". Change
what to Unicode? The default for StreamWriter is UTF-8 anyway. What else
was there to "change"?

If the SMS people come back with a solution or I work it out, I will
post it
for reference.

It seems to me that the immediate problem -- the exception -- is obvious:
you were not setting the ContentLength property correctly. You can fix
that problem by handling the encoding yourself (see the Encoding class) so
that you know exactly how many bytes your message will use, and then just
writing those bytes directly rather than using the StreamWriter class (for
example, as an alternative to using the Encoding class directly, write to
a MemoryStream using StreamWriter, before you need to set the
ContentLength property, and then write the bytes from the MemoryStream out
to your request Stream).

As for whether you are able to get your recipient to understand an
encoding that includes the pound sign (e.g. UTF-8, the default for
StreamWriter), that would be an issue specific to the recipient, and not
really a C#/.NET issue at all.

Pete


.



Relevant Pages

  • Re: Problem with encoding a character
    ... pound symbol is looking like 2 bytes instead of 1. ... your problem very well may be caused by the problem I noted in my previous post: that you are setting the ContentLength property incorrectly by providing character length instead of byte length. ... I thought the pound sign was a unicode character, but when I tried to change ... You can fix that problem by handling the encoding yourself so that you know exactly how many bytes your message will use, and then just writing those bytes directly rather than using the StreamWriter class. ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Problem with encoding a character
    ... pound symbol is looking like 2 bytes instead of 1. ... I thought the pound sign was a unicode character, but when I tried to change ... encoding, so the receiving newsreader has to assume something...my ... I suspect that for whatever reason, your request stream is not getting the ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: telnet password problem
    ... > a password that contains the pound sign, '#', ... the pound symbol "#" is a special character that should not ... be used as a character in a password. ... The only way of using the pound symbol "#" as a literal character is to use ...
    (linux.redhat.misc)
  • =?_autodetect_all?B?UmU6IHByb2JsZW0gd2l0aCCjIGJlaW5nIHBvc3RlZCBiYWNrIHRvIHNpdGU=?=
    ... a user adds the pound symbol "£" in a text area field then character ... This is actually HTML encoding of Unicode characters and has nothing to do with ISO-8859-1. ... The problem is that text area field has ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: The "Pound Sign" vs. the "Number Sign"
    ... as "pound". ... ICL used their own 6-bit character set. ... possible that the program naming convention and some other conventions ... The basic character set was based around a 6-bit byte, ...
    (alt.usage.english)