I've been looking a bit at this, and it seems the HTTP adapter basically does this:
1- It checks the ContentType property of the message to send (or the one configured in the send port options).
2- IF the content type is a text content type (i.e. "text/<whatever>"), it will look at the message body part's Charset property and add the ";charset = " part to the content type of the HTTP request. If the type is not a text type, it leaves it alone.
Looking at the code, one thing I see that might get you out of the issue would be to explicitly ensure the message body part has a null or empty value value for the Charset property by the time it reaches the adapter. Since you might want to have an assembler in the send pipeline, your best bet would be to create a custom pipeline component and add it to the Encode stage of the send pipeline and change the value there after the assembler has already processed the message.
HTH,