gpt4 book ai didi

C++ - 将 istream_iterator 与 wstringstream 一起使用

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:58 27 4
gpt4 key购买 nike

我正在尝试为我编写的程序添加 Unicode 支持。我的 ASCII 代码已编译并具有以下几行:

std::stringstream stream("abc");
std::istream_iterator<std::string> it(stream);

我将其转换为:

std::wstringstream stream(L"abc");
std::istream_iterator<std::wstring> it(stream);

我在 istream_iterator 构造函数中得到以下错误:

error C2664: 'void std::vector<_Ty>::push_back(std::basic_string<_Elem,_Traits,_Alloc> &&)' : cannot convert parameter 1 from 'std::basic_string<_Elem,_Traits,_Alloc>' to 'std::basic_string<_Elem,_Traits,_Alloc> &&'
1> with
1> [
1> _Ty=std::wstring,
1> _Elem=wchar_t,
1> _Traits=std::char_traits<wchar_t>,
1> _Alloc=std::allocator<wchar_t>
1> ]
1> and
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Alloc=std::allocator<char>
1> ]
1> and
1> [
1> _Elem=wchar_t,
1> _Traits=std::char_traits<wchar_t>,
1> _Alloc=std::allocator<wchar_t>
1> ]
1> Reason: cannot convert from 'std::basic_string<_Elem,_Traits,_Alloc>' to 'std::basic_string<_Elem,_Traits,_Alloc>'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Alloc=std::allocator<char>
1> ]
1> and
1> [
1> _Elem=wchar_t,
1> _Traits=std::char_traits<wchar_t>,
1> _Alloc=std::allocator<wchar_t>
1> ]
1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

将上面的代码转换为 Unicode 的正确方法是什么?

谢谢。

附言

我正在运行 Visual Studio 2012

最佳答案

尝试:

std::wstringstream stream(L"abc");
std::istream_iterator<std::wstring, wchar_t> it(stream);

...看看它是否能更好地工作。

关于评论:不,这不是 UTF-8 的。它(或多或少)直接从包含 UTF-16 的文件读取到包含 UTF-16 的字符串。根据编译器及其用于 wchar_t 的大小,它可能是 UTF-32,但(可能)永远不会是 UTF-8。

要从文件中读取 UTF-8 并转换为类似 UTF-32 的格式供内部使用,您可能需要查看 Boost.locale ,其中包括一个 utf-to-utf codecvt facet。

关于C++ - 将 istream_iterator 与 wstringstream 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20959300/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com