On 4/03/2011 03:12, Sam Carleton wrote:
I am looking at using a 3rd party library that only operates on 16-bit
strings. Is there a built in functions to convert the strings back to
8-bit? I am currenly on Windows and Windows has built in functions I could
use, I would prefer to use Apache functions if they exist.
This is a helper class I wrote for the module I'm working on. It
assumes the native wide encoding is UTF-32. To make it cross platform,
you'd have to check what the correct wide encoding is.
This is my first apache module, so any corrections welcome.
class our_response_t
{
protected:
request_rec* m;
apr_xlate_t* m_convset;
char m_bufferBytes[CHARSET_CONVERSION_BUFFER_SIZE];
public:
our_response_t(request_rec* request) : m(request), m_convset(NULL),
m_html(NULL), m_json(NULL)
{
apr_pool_t* pool = m->pool;
apr_status_t status = apr_xlate_open(&m_convset, "UTF-8",
"UTF-32", pool);
if (m_convset)
{
ap_set_content_type(m, "text/html;charset=UTF-8");
}
}
~our_response_t()
{
if (m_convset)
{
apr_xlate_close(m_convset);
}
}
void append_chars(const wchar_t* str, size_t num_chars)
{
apr_size_t inbytes_left = num_chars*sizeof(wchar_t);
apr_size_t outbytes_left = CHARSET_CONVERSION_BUFFER_SIZE-1;
apr_status_t status = apr_xlate_conv_buffer(m_convset, (const
char*)str, &inbytes_left, m_bufferBytes, &outbytes_left);
m_bufferBytes[CHARSET_CONVERSION_BUFFER_SIZE-outbytes_left-1] =
0;
ap_rputs(m_bufferBytes, m);
}
};