Re: Problem with encoding a character

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



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.

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

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.

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.

If the SMS people come back with a solution or I work it out, I will post it
for reference.
--
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.u0a99jyrvmc1hu@xxxxxxxxxxxxxxxxxxxx
On Tue, 15 Sep 2009 08:20:59 -0700, David
<david.colliver.NEWS@xxxxxxxxxxxxxxxxxxxxxxx> wrote:

Hi all,

I am trying to send an SMS and am having problem sending the UK Pound
symbol, £

Looks fine here. "rossum"'s newsreader is probably simply set to assume a
different encoding than mine (your post doesn't actually describe an
encoding, so the receiving newsreader has to assume something...my
newsreader "guessed" right, his "guessed" wrong :) ).

It appears to be crashing out on the streamwriter line. The result I am
getting is...

System.Net.WebException: The request was aborted: The request was
canceled. ---> System.IO.IOException: Cannot close stream until all bytes
are written.

I don't understand this description. What is "the streamwriter line"?
The only line of code you posted that actually has the word "StreamWriter"
in it is where you create it. I don't understand why you'd get something
complaining about closing when you're just trying to create it.

I suspect that for whatever reason, your request stream is not getting the
number of bytes written to it that you advertise in the ContentLength
field. It's not entirely clear why this would be; you're passing the
string length, which if anything should cause the written content to
_exceed_ the ContentLength field (i.e. for any encoding not 8-bits per
character), and in any case I don't see why you'd get an exception until
you actually try to write to the stream.

I suppose it's possible that the Stream you get back from
GetRequestStream() is a special stream for the HttpWebRequest object that
checks the bytes written and automatically closes itself when you reach
the number of bytes you said you were going to write. But even in that
case, I'd expect the exception to happen when you write to the stream, not
when you create it.

For sure, if you use any non-8-bit encoding, you're going to have problems
with the code you posted. But whether that's directly related to the
problem you're asking about, I can't say.

If you really want help, you need to figure out a way to create and post a
concise-but-complete code example that reliably demonstrates the problem.
We have to be able to reproduce the error, and to do so in a way that
isn't dependent on your SMS infrastructure. For example, maybe you can
reproduce the error using a POST to some other web site.

As far as "what encoding should you use" goes...you should use an encoding
that can represent the characters you want to send _and_ which is
supported by the receiving end _and_ you should use it correctly (i.e. the
ContentLength needs to describe the length of the content in bytes, not
characters).

Pete


.



Relevant Pages

  • Re: Stream and Encoding Confusion
    ... We are each writing programs to read an input file and count the number of ... a simple list that says we the program found so many of each character; ... treated as a character stream or a byte stream. ... I'm also somewhat concerned about encoding. ...
    (comp.lang.java.programmer)
  • 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
    ... length, as without the pound symbol, everything worked. ... So, while it wasn't specifically encoding the string, it is getting the ... incorrectly by providing character length instead of byte length. ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Unicode support in Smalltalk
    ... text coming from files on specific platforms). ... that do the mapping between the value stored and the Character ... with a single byte encoding. ... text Stream to be still a String ...
    (comp.lang.smalltalk)
  • Re: C# and encodings
    ... and they can be encoded into a binary stream using an encoding that either supports the full Unicode character set or an encoding that supports the subset that a codepage represents. ...
    (microsoft.public.dotnet.languages.csharp)