ORCL+VC生僻字显示乱码问题

dianhui 2015-06-08 11:09:41
继续追问生僻字显示问题。上一提问没有得到解决:http://bbs.csdn.net/topics/391049344
数据库为ORCL,别人用C#和PB提取数据时都能正确显示生僻字,而我用VC6提取到的数据中有生僻字时,该生僻字显示为乱码。
获取数据的一段代码如下:
//获取项目的姓名
varCounter.lVal=3;
var_value=pORecordset->GetFields()->GetItem(varCounter)->GetValue();
CString s_Name=VariantToCString(var_value);
获取到的s_Name 中如果有一生僻字,生僻字(不是整个字符串)就乱码了。感觉这段代码应该没有问题,因为我搭建了一个SQLSERVER2003的数据做测试,同样是该段代码获取到的生僻字是正常的,没有乱码。

请大家帮帮忙,是不是系统要做什么设置或是上段代码要做什么更改,该问题已经困难很久了,感激不尽啊~~~~~~!
...全文
361 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
dianhui 2015-06-11
  • 打赏
  • 举报
回复
引用 21 楼 cutmelon 的回复:
从你这个描述来看,应该不是编码的问题,如果是编码问题整个串都不会正常。 我感觉像你从数据库里取出来的时候,这个字符被辨识成控制符了,然后数据库转了一道手给你的程序。 建议你升级数据库连接驱动或者用oci来试试。
服务器端用的是ORCL10g,而我开发平台所装的为ORCL8i,不知道你说的数据库连接驱动升级是不是将8i升到10g,还是别的。下面是我连接数据库时用到的连接字符串。不知道是不是有问题。

		m_pConnection.CreateInstance("ADODB.Connection");//创建Connection对象
		_bstr_t strConnect="Provider=OraOLEDB.Oracle.1;Password=h;Persist Security Info=True;User ID=wangp;Data Source=DBTP";//设置连接字符串,必需是BSTR型或者_bstr_t类型
		m_pConnection->Open(strConnect,"wangp","h",adModeUnknown);
schlafenhamster 2015-06-11
  • 打赏
  • 举报
回复
而 HS16GBK 是 ZHS16CGB231280 的升级版本
schlafenhamster 2015-06-11
  • 打赏
  • 举报
回复
应该使用ZHS16GBK ZHS16GBK包含了ZHS16CGB231280
笨笨仔 2015-06-11
  • 打赏
  • 举报
回复
你可以使用API进行编码转换试试
dianhui 2015-06-11
  • 打赏
  • 举报
回复
现在我用Debug查看了一下,这是取出数据后转换成CString时中Debug里有一个错误。
要取出的这个字段内容为:赵洑波
dianhui 2015-06-11
  • 打赏
  • 举报
回复
引用 14 楼 wxhxj0268 的回复:
打个程序员能听懂的比方,汉字编码就象地址,字库就是存放显示的字模,如果二者对应,计算机从地址处就可以取出显示的字模,如果不对应显示就乱了。 不清楚你的具体情况,只能建议你检查软件中设置的字体是否支持扩展汉字库。
字库应该是没有问题的,因为同样的代码,我建了一个SQL 2003的测试库,将连接指向该测试库,生僻字却可以正常显示了,这说明我的开发环境应该没有问题。
笨笨仔 2015-06-11
  • 打赏
  • 举报
回复
打个程序员能听懂的比方,汉字编码就象地址,字库就是存放显示的字模,如果二者对应,计算机从地址处就可以取出显示的字模,如果不对应显示就乱了。 不清楚你的具体情况,只能建议你检查软件中设置的字体是否支持扩展汉字库。
cutmelon 2015-06-11
  • 打赏
  • 举报
回复
从你这个描述来看,应该不是编码的问题,如果是编码问题整个串都不会正常。 我感觉像你从数据库里取出来的时候,这个字符被辨识成控制符了,然后数据库转了一道手给你的程序。 建议你升级数据库连接驱动或者用oci来试试。
dianhui 2015-06-11
  • 打赏
  • 举报
回复
引用 18 楼 schlafenhamster 的回复:
应该使用ZHS16GBK ZHS16GBK包含了ZHS16CGB231280
关键是数据的编码不能更改,PB和C#取数据都正常显示,VC不行啊。
dianhui 2015-06-10
  • 打赏
  • 举报
回复
引用 11 楼 wxhxj0268 的回复:
首先你必须清楚,显示一个汉字涉及到2个问题: 1、汉字的编码;2、汉字的字库。 你的编码方式正确了还必须要有字库的支持,否则就只能显示乱码。
不明白,请大师明言啊,再申明一下,我电脑上用PB和C#的软件取数据时,那个字段上的生僻字是可以正常显示的,VC6生僻字就乱码。这是不是说明我电脑上的字库是正常的呢?
dianhui 2015-06-10
  • 打赏
  • 举报
回复
引用 10 楼 schlafenhamster 的回复:
NLS_CHARACTERSET 是 ZHS16CGB231280 找到该字库
不明白,请大师明言啊,再申明一下,我电脑上用PB和C#的软件取数据时,那个字段上的生僻字是可以正常显示的,VC6生僻字就乱码。
笨笨仔 2015-06-10
  • 打赏
  • 举报
回复
首先你必须清楚,显示一个汉字涉及到2个问题: 1、汉字的编码;2、汉字的字库。 你的编码方式正确了还必须要有字库的支持,否则就只能显示乱码。
schlafenhamster 2015-06-10
  • 打赏
  • 举报
回复
NLS_CHARACTERSET 是 ZHS16CGB231280 找到该字库
dianhui 2015-06-10
  • 打赏
  • 举报
回复
求版主现身啊……
酱油党 2015-06-09
  • 打赏
  • 举报
回复
都转成UNICODE的吧。
dianhui 2015-06-09
  • 打赏
  • 举报
回复
继续等待……
dianhui 2015-06-09
  • 打赏
  • 举报
回复

这个是数据库的字符集参数。
继续等待……
jiqiang01234 2015-06-08
  • 打赏
  • 举报
回复
存入数据库的汉字是什么编码?读取的时候就用相同的编码 int MultiByteToWideChar( UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cbMultiByte, LPWSTR lpWideCharStr, int cchWideChar)
dianhui 2015-06-08
  • 打赏
  • 举报
回复
引用 1 楼 jiqiang01234 的回复:
八成是编码的问题,如果是生僻字,GB2312编码已经不满足了,需要GBK编码
问题方向应该差不多是,我要解决方案啊,怎么这个问题就这么难嘛?
jiqiang01234 2015-06-08
  • 打赏
  • 举报
回复
八成是编码的问题,如果是生僻字,GB2312编码已经不满足了,需要GBK编码
加载更多回复(2)

16,549

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧