查看: 4361|回复: 13

osg显示中文乱码?

[复制链接]

该用户从未签到

发表于 2010-10-27 15:49:55 | 显示全部楼层 |阅读模式
osg显示标注时出现乱码,我已经将string转换为宽字符,并且也修改了字体库为simhei.ttf。

该用户从未签到

发表于 2010-10-27 21:12:56 | 显示全部楼层
您什么问题也没有说明,只是在描述自己见到的,以及自己个人的判断

您是否编译了osgdb_freetype插件,您是否真的正确设置了字库,是否真的正确设置了宽字符。这些我们都无法判断,因为我们什么都没有看到

该用户从未签到

 楼主| 发表于 2010-10-28 07:48:49 | 显示全部楼层
2# array
你好,我的部分代码是这样的:
//ossimString转宽字符的函数/////////////////////////////////////////////////////
wchar_t* ossimPlanetKmlPlacemarkNode::str2wchar(ossimString str)
{
        const char* cstr=str.c_str();
        //wcout.imbue(locale("chs"));  
        DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, cstr, -1, NULL, 0);
        wchar_t *pwText = new wchar_t[dwNum];
        MultiByteToWideChar (CP_ACP, 0, cstr, -1, pwText, dwNum);
        return pwText;
}
/////////////////////////////////////////////////////////////////////////////////////

static osg::ref_ptr<osgText::Font> defaultFont = osgText::readFontFile("fonts/simhei.ttf");//设置字体库

该用户从未签到

发表于 2010-10-28 08:14:20 | 显示全部楼层
1. 确认osgdb_freetype插件存在
2. 确认simhei.ttf被找到,即defaultFont不为NULL

我不清楚ossimString是什么,如果它和std::string一样的话,那么转换函数看起来问题不大

该用户从未签到

 楼主| 发表于 2010-10-28 09:39:25 | 显示全部楼层
4# array

这个freetype库是存在的,字体库也存在。
ossinstring和std:string可以说是一样的。
另外使用宋体字库的话就不会显示乱码,但却只有英文。这是什么原因呢?
理论上来说,无论是simhei.ttf还是simsun.ttf显示的结果应该是一样的吧,百思不得其解,继续请教!

谢谢!

该用户从未签到

发表于 2010-10-28 11:21:01 | 显示全部楼层
simsun也是失败的,原因依然是您的字库没有正确加载,请给出截图,这样我们很容易判断是否是您的字库加载失败,抑或osgdb_freetype不存在

该用户从未签到

 楼主| 发表于 2010-10-28 14:09:40 | 显示全部楼层
本帖最后由 icing 于 2010-10-28 14:11 编辑

6# array

该用户从未签到

 楼主| 发表于 2010-10-28 14:12:07 | 显示全部楼层
这图怎么贴不上呀,应该怎么贴呀?
7# icing

该用户从未签到

 楼主| 发表于 2010-10-28 14:17:22 | 显示全部楼层
本帖最后由 icing 于 2010-10-28 14:18 编辑

image001.jpg 6# array
终于贴上了,array请看,这就是使用黑体字库后,出现的乱码。

该用户从未签到

发表于 2010-10-28 15:56:04 | 显示全部楼层
这样的话,很明显是您的多字符转换做错了,这和OSG没什么关系;您可以检查自己的ossimString和MultiByte2WideChar部分的代码

该用户从未签到

 楼主| 发表于 2010-10-28 16:50:53 | 显示全部楼层
多字符转换没有错误,因为我用这个转换函数做了其它的汉化,是正常的。
ossimstring的部分看不出有什么错误呀。
还请array指教!
谢谢!

该用户从未签到

发表于 2010-10-29 08:19:34 | 显示全部楼层
已经没有什么可以指教的了,只剩下两种可能性,您可以分别排查:
1、您的多字符转换存在错误,您可以尤其检查一下ossimString是否有问题,比如将其换成std::string
2、您的字库文件坏了……

该用户从未签到

 楼主| 发表于 2010-10-31 18:05:46 | 显示全部楼层
呵呵,还是谢谢array!
不过我已经试过换成std::string,结果依然如故;关于字库文件我也在其他地方调用过,没有出现问题。
真的是不知道问题出在哪里啦,\(^o^)/~

该用户从未签到

发表于 2012-11-2 16:15:33 | 显示全部楼层
icing 发表于 2010-10-31 18:05
呵呵,还是谢谢array!
不过我已经试过换成std::string,结果依然如故;关于字库文件我也在其他地方调用过 ...

你的问题解决了吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表