如何在将char*转换为wchar_t*时设置Locale

How to setLocale when converting char* to wchar_t*?

本文关键字:Locale 设置 wchar 转换 char      更新时间:2023-10-16

我不会撒谎,我从https://stackoverflow.com/a/8032109/866333:

std::wstring *GetWC(const char *c)
{
    const size_t cSize = strlen(c)+1;
    std::wstring wc( cSize, L'#' );
    mbstowcs( &wc[0], c, cSize );
    //wchar_t wc[cSize];
    //mbstowcs (wc, c, cSize);
    return wc;
}

我正试图弄清楚什么意思,例如:

记住在main中设置相关的语言环境。

例如,setlocale(LC_ALL,")。

在我的案例中,我从文件中读取UTF-8(最初是ISO 8859-1,但这是突破性的东西),我相信我所有的文字都是ISO 8859-1-因为这是我的语言环境,我有太多的源文件无法在Windows中轻松转换。我的目标是安卓系统。我有点希望把ISO 8859-1和UTF-8混合在一起!我必须转换成一个吗?

让我说对了,我需要setLocale来委派转换例程吗?就像我拍他们一样!我热衷于效率,但这似乎是在扰乱可能静态的全局变量?如果区域设置最初完全不同,这肯定会产生副作用吗?

如果没有setLocalembstowcshttps://stackoverflow.com/a/4826290/866333

wchar_t  ws[100];
swprintf(ws, 100, L"%hs", "ansi string");

还有可能吗?我在libc手册中看不到%hs。

setLocale是否可以避免将我的完整8位(ASCII/ISO-8859-1)转换为多字节UTF-8,从而避免保存字符串操作?

很抱歉有这么多问题。

不使用setLocale,您可以简单地进行

swprintf(ws, 100, L"%s", "answersi string");

实时演示