wchar_t在Windows下的是utf16编码,Linux下面则是utf32编码,有些时候这些不同会带来代码移植问题。 下列转换宏提供了从wchar_t 到UTF16编码的转换 #ifdef WIN32 #define USES_WCSUTF16_CONV #define WCS2UTF16(wcs) (wcs) #define UTF162WCS(utf16) (utf16) #else //WIN32 static unsigned short * _wcsu16_wcs2utf16(wchar_t *wcs, unsigned short * utf16, int len) { int wc; wchar_t *end = wcs + len; unsigned short * ret = utf16; while(wcs < end) { wc = *(wcs++); if (wc > 0xFFFF) { wc -= 0x00010000L; *utf16++ = 0xD800 | (wc >> 10); *utf16++ = 0xDC00 | (wc & 0x03FF); } else { *utf16++ = wc; } } return ret; } static int _wcsu16_utf16len(wchar_t *wcs) { int wc; int ret = 0; while(wc = *wcs++) ret += wc > 0xFFFF ? 2 : 1; return ret; } static int _wcsu16_w