高分请问:sprintf函数 与 字符集的有关问题,详见帖子

高分请教:sprintf函数 与 字符集的问题,详见帖子
有如下语句:
const char *pNameUtf8 = CStaticData::Instance()->GetWord(1);
const char *pName = "NI你";

char sql[1024] = {0},  sqlUtf8[1024] = {0};
sprintf_s(sql, sizeof(sql), "select 1 from table_test where name = \'%s\'", pName);
sprintf_s(sqlUtf8, sizeof(sqlUtf8), "select 1 from table_test where name = \'%s\'", pNameUtf8);


环境vs2010,

pNameUtf8 是根据函数GetWord返回的utf8字符集,
pName 是在代码的常量指针,
二者的字面意思都是"NI你"

sql的结果是:select 1 from table_test where name = 'NI浣?    
sqlUtf8结果:select 1 from table_test where name = 'NI你'

为什么sql的结束符前的字符'不见了?

请不吝赐教,谢谢

------解决方案--------------------
用unicode字符串.或者全部转换成UTF8再显示
------解决方案--------------------
utf-8编码的 你 对应的是  0xE4, 0xBD, 0xA0
显示的时候,如果第一个字节的最高位是1的话,那么就2个字符显示出一个文字。
0xE4, 0xBD 显示的是 浣 
0xA0,0x27 没这个字符 于是就给了?号了。

pNameUtf8 得到的也是ansi编码的,你是2字节,所以也能正常显示。
------解决方案--------------------
UTF8 ANSI 相互转换的函数 .
------解决方案--------------------
2010里面得使用unicode
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

提示错误:[Microsoft][ODBC SQL Server Driver][SQL Server]字符串 'NI浣?' 后的引号不完整。

看报错应该先将utf-8转化为ansi。


转换后确实可行
现在没想明白的是,为什么执行sprintf_s函数后,最后一个字符'不见了


显示的时候,如果第一个字节的最高位是1的话,那么就2个字符显示出一个汉字。
0xE4, 0xBD 显示的是 浣 
0xA0最高位是1,那么就跟后面的'合并成1个汉字符了。
0xA0,0x27 没这个字符 于是就给了?号了。


那执行该sql语句的时候,提示错误:提示错误:[Microsoft][ODBC SQL Server Driver][SQL Server]字符串 'NI浣?' 后的引号不完整。

难道是sql本身本身的问题高分请问:sprintf函数 与 字符集的有关问题,详见帖子

是sql支持字符集的问题啊,要是sql只支持utf-8编码的话
select 1 from table_test where name = 'NI浣?   这样就能正常识别。


------解决方案--------------------
字符集最好换成一种来使用。。