C++;编码问题 我使用Basic X,并尝试在Windows 7上集成XML数据库和C++。我使用来自的BaseXclient API 它包含pugixml解析器并使用boost库。我让它工作,但我有问题的编码。我的数据库中的xml dokuments是utf-8,包含一些在控制台输出上没有正确显示的字母和符号(如ä和°)
我使用chcp 65001设置控制台代码页。 我用std::setlocale(LC_ALL,“”)更改了区域设置;在C++中,当我直接在程序中调用这些字母和符号而不是从数据库中显示时,它们会被正确显示。数据库输出也已更改,但仍然错误 我还使用pugi::xml\u encoding::encoding\u utf8设置了pugi解析器;但数据库输出不受影响。以下是字符串列表界面的代码示例:C++;编码问题 我使用Basic X,并尝试在Windows 7上集成XML数据库和C++。我使用来自的BaseXclient API 它包含pugixml解析器并使用boost库。我让它工作,但我有问题的编码。我的数据库中的xml dokuments是utf-8,包含一些在控制台输出上没有正确显示的字母和符号(如ä和°),c++,xml,boost,C++,Xml,Boost,我使用chcp 65001设置控制台代码页。 我用std::setlocale(LC_ALL,“”)更改了区域设置;在C++中,当我直接在程序中调用这些字母和符号而不是从数据库中显示时,它们会被正确显示。数据库输出也已更改,但仍然错误 我还使用pugi::xml\u encoding::encoding\u utf8设置了pugi解析器;但数据库输出不受影响。以下是字符串列表界面的代码示例: virtual ~my_string_list_interface() {}; my_string_l
virtual ~my_string_list_interface() {};
my_string_list_interface(const std::string& DBHOST, const std::string& DBPORT, const std::string& DBUSER,const std::string& DBPASSWD) : base_type(DBHOST,DBPORT,DBUSER,DBPASSWD) {};
virtual my_string_list get(string query,int stage){
my_string_list my_string_list_;
pugi::xml_encoding::encoding_auto;
pugi::xml_parse_result parse_;
pugi::xml_document doc;
string results = session().execute("XQUERY "+query);
parse_ = doc.load(results.c_str());
pugi::xpath_node_set is = doc.select_nodes("/record/mid");
API使用boost streambuf获取数据。boost streambuf的代码如下所示:
std::string read_streambuffer(){return read_streambuffer(response_);};
std::string read_streambuffer(boost::asio::streambuf & response)
{
std::string results;
boost::system::error_code error;
boost::asio::streambuf::const_buffers_type bufs = response.data();
std::size_t size(0);
std::string line;
auto ptr_b = boost::asio::buffers_begin(bufs);
for(; ptr_b != boost::asio::buffers_end(bufs); ++ptr_b, ++ size)
{if (*ptr_b != 0) {line.push_back(*ptr_b);} else if (size > 1) break; };
response.consume(size);
return line;
};
有没有办法指定缓冲流或字符串的编码?我使用字符串列表作为数据库输出。我应该使用wstring还是我遗漏了什么?
谢谢 至少整个
read\u streambuffer
可以(应该)感谢,但这对我来说不起作用。我找到了一个简单的解决方案,只使用了std::replace(results.begin()、results.end()、“·ä”);每一个不同的符号。这不是最好的解决方案,但它起了作用。至少整个read\u streambuffer
可以(应该)感谢,但这对我来说不起作用。我找到了一个简单的解决方案,只使用了std::replace(results.begin()、results.end()、“·ä”);每一个不同的符号。这不是最好的解决办法,但它奏效了。