【发布时间】: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 来委派转换例程吗?就像我让他们失望一样!我热衷于提高效率,但似乎这与可能的静态全局变量混淆了?如果语言环境最初完全不同,这必然会产生副作用吗?
没有setLocale 或mbstowcs 将https://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