[ 
https://issues.apache.org/jira/browse/AXISCPP-964?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12673417#action_12673417
 ] 

nadir amra commented on AXISCPP-964:
------------------------------------

OK, I have created:

src/platforms/PlatformLanguageUtils.hpp that has a static routine:

    static wchar_t * toWchar(const char *charBuf, int charLen);
    static char *       toChar(const wchar_t *wcharBuf, int wcharLen);
    static char *       toUTF8(const char *charBuf, int charLen);

The key here is toUTF8().  Question is whether there is a generic 
implementation that can be used to convert strings to UTF8 for windows and 
unix?  Is iconv() something that should be used?  Currently the routine throws 
an exception of invoked.  However, OS/400 has own implementation file in 

src/platforms/os400/PlatformLanguageUtils.cpp

that it uses.  If iconv is something that can be used, is that part of OS on 
unix and windows?  What is dll (window) or library name (unix name)?

> SOAP request/response not UTF-8 encoded (but claims to be)
> ----------------------------------------------------------
>
>                 Key: AXISCPP-964
>                 URL: https://issues.apache.org/jira/browse/AXISCPP-964
>             Project: Axis-C++
>          Issue Type: Bug
>          Components: SOAP
>    Affects Versions: current (nightly)
>         Environment: All platforms, except OS/400
>            Reporter: Henrik Nordberg
>
> (See the end of this description for a one-liner that works around this 
> problem for most cases.)
> SoapSerializer.cpp, line 379 says
> serialize( "<?xml version='1.0' encoding='utf-8' ?>", NULL);
> that is that the SOAP response is UTF-8 encoded. But this is only true for 
> OS/400 as can be seen in HTTPTransport.cpp, lines 311-
> #ifndef __OS400__
>         *m_pActiveChannel << this->getHTTPHeaders ();
>         *m_pActiveChannel << this->m_strBytesToSend.c_str ();
> #else
>         // Ebcdic (OS/400) systems need to convert the data to UTF-8. Note 
> that free() is 
>         // correctly used and should not be changed to delete().              
>         const char *buf = this->getHTTPHeaders ();
>         utf8Buf = toUTF8((char *)buf, strlen(buf)+1);
>         *m_pActiveChannel << utf8Buf;
>         free(utf8Buf);
>         utf8Buf = NULL;
>         utf8Buf = toUTF8((char *)this->m_strBytesToSend.c_str(), 
> this->m_strBytesToSend.length()+1);
>         *m_pActiveChannel << utf8Buf;
>         free(utf8Buf);
>         utf8Buf = NULL;
> #endif
> This leads to clients trying to decode the response as UTF-8, and will have 
> errors whenever the response contains non-ASCII characters (i.e., > 127).
> Axis Java, for example, will prduce this error upon decoding: 
> "java.io.UTFDataFormatException: Invalid byte 2 of 3-byte UTF-8 sequence."
> A simple workaround is to change SoapSerializer.cpp, line 379:
> from
> serialize( "<?xml version='1.0' encoding='utf-8' ?>", NULL);
> to
> serialize( "<?xml version='1.0' encoding='ISO-8859-1' ?>", NULL);
> The real fix, however, is to encode the response with UTF-8 for all platforms 
> (not just OS/400).

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to