将char *转换为wchar_t *时如何setLocale?

时间:2014-09-08 12:00:46

标签: android c++ character-encoding locale

我不会撒谎,我从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中轻松转换。我的目标是Android。我有点希望将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,从而节省字符串操作吗?

很抱歉有这么多问题。

1 个答案:

答案 0 :(得分:1)

不使用setLocale,您只需

即可
swprintf(ws, 100, L"%s", "ansi string");

Live demo