Re: Problem with encoding a character
- From: "Peter Duniho" <no.peted.spam@xxxxxxxxxxxxxxxxxx>
- Date: Tue, 15 Sep 2009 13:13:57 -0700
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
.
- Follow-Ups:
- Re: Problem with encoding a character
- From: David
- Re: Problem with encoding a character
- References:
- Problem with encoding a character
- From: David
- Re: Problem with encoding a character
- From: Peter Duniho
- Re: Problem with encoding a character
- From: David
- Problem with encoding a character
- Prev by Date: How to determine project type in VS2008 (C#)
- Next by Date: Re: Image.SetPropertyItem does not work
- Previous by thread: Re: Problem with encoding a character
- Next by thread: Re: Problem with encoding a character
- Index(es):
Relevant Pages
|