首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >codecvt_utf8<wchar_t>被转换为本机codecvt<wchar_t,char>

codecvt_utf8<wchar_t>被转换为本机codecvt<wchar_t,char>
EN

Stack Overflow用户
提问于 2014-02-07 12:32:25
回答 1查看 488关注 0票数 0

在我正在编写的string类中,有以下代码作为私有函数(它是从wstring_convert“借用”的,并由我做了一些修改):

代码语言:javascript
复制
template <typename T>
std::string my_string::to_bytes(const typename T::intern_type *_First, const typename T::intern_type *_Last) const
{
    const T* p_conv = &std::use_facet<T>(m_loc);
    ...
    switch (p_conv->out(_State0, _First, _Last, _First, _Dest, _Dest + _Bbuf.size(), _Dnext))
    {
        ...
    }
}

m_loc是一个包含系统区域设置的全局std::locale。

函数本身并不是问题所在,问题是当我像这样调用这个函数时:

代码语言:javascript
复制
const wchar_t *_Wptr = wstr.c_str();
m_utf8 += to_bytes<codecvt_utf8<wchar_t>>(_Wptr, _Wptr + wstr.size());

它实际上并不使用codecvt_utf8<wchar_t> (它在本机wchar_t和utf-8之间进行转换),而是使用codecvt<wchar_t, char> (在本机wchar_t和本机char之间进行转换)。我一辈子都不明白为什么会发生这种事。显然,我一定要在某个地方做错事,我可以承认,现场系统的所有方面和什么都让我有点困惑。

我想这在某种程度上是一个与use_facet和我的地区有关的问题。也许区域设置不能创建utf-8面?如果这句话有意义的话?也许我没有正确地使用use_facet?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-07 12:54:34

codecvt_utf8是一个独立的、与地区无关的方面,由标准库提供.没有必要使用use_facet来访问它。

您从use_facet<T>得到的是在您的区域设置中使用id T::id的任何方面,这恰好是它的代码

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21627895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档