在服务器应用程序中,我试图用UTF-8解析希腊文的响应,但是由于我的本地字符集为1254,因此我无法访问每个希腊文字符。
我尝试将我的线程本地设置为1253,但是没有用。我想知道是否有一种方法可以将我的1254字符集计算机中的UTF-8字符串转换为windows.1253(希腊语),仅用于某些客户端响应。
顺便说一句,当我将区域设置更改为希腊语时,我没有任何问题,但是我无法遵循此解决方案,因为我的本地设置应保留为Windows。
Windows在内部使用“ Unicode”,它是以2字节字符(wchar_t)存储的UTF-16。您可以使用WideCharToMultiByte独立于本地化设置转换为任何代码页。
一些示例代码:
int wideTo1253(char *out_buffer, int out_buffer_size, wchar_t const *in_buffer)
{
BOOL b;
LPBOOL bb = &b;
return WideCharToMultiByte(
1253,
WC_NO_BEST_FIT_CHARS,
in_buffer,
-1,
out_buffer,
out_buffer_size,
nullptr,
bb
);
}
如果文本是UTF-8编码的,则可以先使用MultiByteToWideChar将其转换为Wide / Unicode / UTF-16。
根据评论更新:
这是示例代码,显示WideCharToMultiByte正确将“宽”字符转换为代码输入1253:
constexpr int out_buffer_size = 32;
unsigned char out_buffer[out_buffer_size];
WideCharToMultiByte(
1253,
WC_NO_BEST_FIT_CHARS,
L"πμ",
-1,
(char *) out_buffer,
out_buffer_size,
nullptr,
bb
);
// Codes from https://en.wikipedia.org/wiki/Windows-1253
assert(out_buffer[0] == 0xF0); // π
assert(out_buffer[1] == 0xEC); // μ
如果没有获得正确的输出,则需要检查您的输入!