[C ++在土耳其语(1254)计算机上使用希腊语代码页(1253)

问题描述 投票:1回答:1

在服务器应用程序中,我试图用UTF-8解析希腊文的响应,但是由于我的本地字符集为1254,因此我无法访问每个希腊文字符。

我尝试将我的线程本地设置为1253,但是没有用。我想知道是否有一种方法可以将我的1254字符集计算机中的UTF-8字符串转换为windows.1253(希腊语),仅用于某些客户端响应。

顺便说一句,当我将区域设置更改为希腊语时,我没有任何问题,但是我无法遵循此解决方案,因为我的本地设置应保留为Windows。

c++ codepages character-set
1个回答
0
投票

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:

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); // μ

如果没有获得正确的输出,则需要检查您的输入!

© www.soinside.com 2019 - 2024. All rights reserved.