高分请问:sprintf函数 与 字符集的有关问题,详见帖子
高分请教:sprintf函数 与 字符集的问题,详见帖子
有如下语句:
环境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
------解决方案--------------------
是sql支持字符集的问题啊,要是sql只支持utf-8编码的话
select 1 from table_test where name = 'NI浣? 这样就能正常识别。
------解决方案--------------------
字符集最好换成一种来使用。。
有如下语句:
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
------解决方案--------------------
是sql支持字符集的问题啊,要是sql只支持utf-8编码的话
select 1 from table_test where name = 'NI浣? 这样就能正常识别。
------解决方案--------------------
字符集最好换成一种来使用。。