在VS2012中使用OTL库对SQL写入时,出现中文乱码的有关问题

在VS2012中使用OTL库对SQL写入时,出现中文乱码的问题
使用OTL库对SQL Sever进行插入和读取操作,VS设置为
在VS2012中使用OTL库对SQL写入时,出现中文乱码的有关问题
代码为:
std::stringstream ss;
ss << "CREATE TABLE  test_chinese(CHTitle nVarchar(128))";
long ret = otl_cursor::direct_exec(dbh, (const char*)ss.str().c_str(), otl_exception::disabled);
//dbh为otl_connect
std::stringstream ssinsert;
ssinsert << "INSERT INTO test_chinese (CHTitle) VALUES (N'中文')";
otl_stream isin(1,ssinsert.str().c_str(),dbh);
std::stringstream ssselect;
ssselect<<"select * from test_chinese";
otl_stream is(1,ssselect.str().c_str(),dbh);

新手求助
------解决方案--------------------
对了 ,你的字段 用的是 nvarchar类型吗
------解决方案--------------------
先确认 std::stringstream 的字符集是固定的还是应用选项设置中的字符集?
------解决方案--------------------
打开sql server 的查询分析,执行select * from test_chinese正常吗?
如果显示正常则说明你的vs2012汉化有问题了
------解决方案--------------------
引用:
Quote: 引用:

先确认 std::stringstream 的字符集是固定的还是应用选项设置中的字符集?


新手惭愧,什么是固定的还是应用选项设置中的字符集?是std::stringstream中的吗?我去找下资料

C的字符串是自己数组,所以必定会有 WideCharToMultiByte/MultiByteToWideChar 的转换。
比较不同配置下 ssinsert.str() 的自己数组是否相同可以确认。

现在很明显 stringstream 和 otl_stream 的编码方式不同。
你0楼中中文是 stringstream 编码、otl_stream 解码,不一致产生了乱码。
而在5楼中改为中文同样用 otl_stream 编码、解码,就得到了正确的结果。

你查查 otl_stream 的帮助,它的编码是否受VS设置的影响。
其实把VS设置的字符集改为中文(GB2312) 试试就知道了。
结合前面stringstream的分析,如果stringstream用系统默认的中文编码,otl_stream 也用中文就一致了。