1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
/*
* Encode a string of wchar_t as UTF-8.
*/
#include "putty.h"
#include "misc.h"
char *encode_wide_string_as_utf8(const wchar_t *ws)
{
strbuf *sb = strbuf_new();
while (*ws) {
unsigned long ch = *ws++;
if (sizeof(wchar_t) == 2 && IS_HIGH_SURROGATE(ch) &&
IS_LOW_SURROGATE(*ws)) {
ch = FROM_SURROGATES(ch, *ws);
ws++;
} else if (IS_SURROGATE(ch)) {
ch = 0xfffd; /* illegal UTF-16 -> REPLACEMENT CHARACTER */
}
char utf8[6];
size_t size = encode_utf8(utf8, ch);
put_data(sb, utf8, size);
}
return strbuf_to_str(sb);
}
|