std:string中文乱码问题?求助高手

Geoleung 2010-02-08 09:14:21
代码大致如下:
///////////////////////////////////////////////////////////////////////////////////////

//std::string strLabel="Degree"//被注释
std::string strLabel="度数"
//......
theLatText->setText(strLabel+ Num.toString(theNumDisplayString.c_str()).c_str());

///////////////////////////////////////////////////////////////////////////////////////
我这里:
之前用英文字符“Degree”赋值时,未出现乱码。
但是!将中文字符赋给std::string,然后和阿拉伯数字组成字符串做加法运算,得到的结果是“部分乱码”+数字正常显示。
找了很多办法,不知道如何处理。希望大家能帮我解决这个中文乱码的问题

此任务,基于Qt框架,开发环境VS,在主界面中有一个地图视窗,地图视窗有经纬度显示,这个经纬度我希望用中文字符和阿拉伯数字显示.需要进一步详细的交流与合作的,联系我fabulouslw@163.com。共同合作发展
...全文
5939 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
Geoleung 2010-02-10
  • 打赏
  • 举报
回复
回复pgplay:
感谢你的关注,是在使用std::string显示经纬度时出现乱码的!
我现在使用MultiByteToWideChar函数对字符进行了转换后,然后再使用,不错仍然是乱码,乱码是两个“方框”,我的代码大致如下:
char* cstr="中文";
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);
theLatText->setText(pwText);
有什么问题,请您指教
xiao_yanjing 2010-02-10
  • 打赏
  • 举报
回复
这种问题还真是没出现过。
Geoleung 2010-02-10
  • 打赏
  • 举报
回复
谢谢大家的关注,问题已经解决!!!!!!!!!

转为宽字符,然后使用相应的字库,就可以显示中文了,特别感谢pgplay。
是你提醒我了,我以前的字库不支持中文,我换了一个字库simhei.ttf,现在就可以显示中英文字符了

我暂时没有积分,交个朋友,有事情可以邮箱联系我!!!!
Geoleung 2010-02-10
  • 打赏
  • 举报
回复
回复pgplay:
直接theLatText->setText(L"中文")也是有同样的空码问题。谢谢你了!!!

大家有空多交流
Geoleung 2010-02-10
  • 打赏
  • 举报
回复
回复TBWood:
你给的例子我试了,这样编写代码报错,第二句编译错误,错误提示是:
无法从“const wchar_t [4]”转换为“std::basic_string<_Elem,_Traits,_Ax>”

谢谢你的关注,我这个项目基于OSG,目前使用std::string出现中文乱码。希望能参考您的意见,最近头都大了。
tbwork 2010-02-10
  • 打赏
  • 举报
回复
初步判断为ANSI字符集 和 双字节字符集(Unicode,DBCS)的问题。
中文肯定是双字节的,英文一般是单字节,申明成双字节试试呢
如:
string Cstr="中国";
string Estr=L"abc";
string Sum=Cstr+Estr;
这样应该没问题,不过没测试,有问题,提出来
耍宝王 2010-02-10
  • 打赏
  • 举报
回复
两个“方框”这个看上去像是UNICODE编码 空码 的现象。你直接theLatText->setText(L"中文"); 试试看会不会有 乱码 或 空码 现象,如果有可能是OSG没有能正常使用中文字库(字体),这方面我就不熟了,对不起
Geoleung 2010-02-09
  • 打赏
  • 举报
回复
回复楼上的:
这个项目基于OSG框架,不是ATL也不是MFC,字符串的处理采用std::string,目前的问题是中文乱码
Sou2012 2010-02-09
  • 打赏
  • 举报
回复
MFC/ATL 用 CString
Geoleung 2010-02-09
  • 打赏
  • 举报
回复
楼上的好:
我现在的这个项目是一个解决方案的一部份,这个项目专门负责显示地图和经纬度。
此项目基于OSG显示引擎,没有用到QT框架的内容。但是此项目生成的地图客户区将部署在一个基于QT的主界面上。
请问,我如何在此项目中使用QT的东西,比如类QTextCodec,直接包含相应的头文件,好像不行!!
谢谢大家指点!!!
某某9 2010-02-09
  • 打赏
  • 举报
回复
引用 6 楼 pgplay 的回复:
找到一个资料,希望有用《关于qt 支持中文、国际化》
ding!
Geoleung 2010-02-09
  • 打赏
  • 举报
回复
回复chenyu2202863:

感谢你的帮助
我采用wstring做过测试,设置了locale,imbue.可是仍然是乱码显示在客户区,乱码是两个方框

这个会不会还是与QT编码规范有关的问题
chenyu2202863 2010-02-09
  • 打赏
  • 举报
回复
如果你需要用到utf-8编码,那可以参考
http://blog.csdn.net/winterTTr/archive/2009/08/14/4446860.aspx
chenyu2202863 2010-02-09
  • 打赏
  • 举报
回复
你需要注意
local设置,和imbue的相关参数
Geoleung 2010-02-09
  • 打赏
  • 举报
回复
回复chenyu2202863:
你好,谢谢你的关注,我的这个项目是显示地图和经纬度,显示引擎是OSG.
setText函数有一个重载函数,原型如下:
void setText(const wchar_t* text);
问题在于,我这里要显示的经纬度:既包含中文字符,也包含浮点数字符串,这个如何解决呢
Geoleung 2010-02-09
  • 打赏
  • 举报
回复
另外提出一个问题:
我的这个任务部署在一个VS解决方案中,这个解决方案包含多个项目,其中“显示地图”专门有一个项目MapPrj实现,该项目没有引用QT框架,只是基于OSG引擎实现显示任务。
所以这里涉及到的“地图区域中文字符乱码”问题,是与QT编码规范有关吗?如果是有关,我如何在此项目中使用QT的东西,比如类QTextCodec,直接包含相应的头文件,好像不行!!
求助大家!!!
chenyu2202863 2010-02-09
  • 打赏
  • 举报
回复
不要嫌麻烦,把所有的string换成wstring吧,Windos2000以后都是Unicode的内核~
你可以
#ifdef _UNICODE
typedef std::wstring tString;
#else
typedef std::string tString;
#endif
Geoleung 2010-02-09
  • 打赏
  • 举报
回复
我是在Win32环境下开发基于QT的应用程序,楼上的DontKissBossAss感谢你的指点,能不能给出代码示例

十分感谢
耍宝王 2010-02-09
  • 打赏
  • 举报
回复
LZ能不能确认一下,这乱码是出现在给std::string赋值的时候,还是使用std::string的时候,如果是前者,可以试试WideCharToMultiByte,如果是后者就试试MultiByteToWideChar

VS2005及以上都默认使用UNICODE编码的
DontKissBossAss 2010-02-08
  • 打赏
  • 举报
回复
很明显,你用muiltchar 显示 wide char,如果不能改wstring的话,也可以,但是有个要求输出字符串的系统是基于cp936的,这就可以了

比如,char *a = "维度+3672"这个字符你在cp上输出是没问题的(亲身试用str 系列函数)
但是,如果你这个系统是cp936意外的,那中文全乱码了,不过asc部分 很“幸运”的都是正确显示
加载更多回复(6)

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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