【问题标题】:How to setLocale when converting char* to wchar_t*?将 char* 转换为 wchar_t* 时如何设置区域设置?
【发布时间】:2014-11-01 15:28:52
【问题描述】:

我不会撒谎,我从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,从而节省字符串操作?

很抱歉有这么多问题。

【问题讨论】:

    标签: android c++ character-encoding locale


    【解决方案1】:

    不使用setLocale,你可以简单地做

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

    Live demo

    【讨论】:

      猜你喜欢
      • 2018-01-07
      • 2011-03-14
      • 2021-01-29
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      相关资源
      最近更新 更多