住宅百科

vs2010 调试乱码_Cocos2d—X游戏开发之VS2010 控制台输出中文,模拟器中文乱码问题...

谨记:vs默认debug调试显示变量是?GB2312编码,而开发中c、cpp文档编码格式通常需要UTF-8,在此文档下汉字字符串已经是UTF8,调试窗口是用GB2312显示乱码(本身并未乱码)所以需要借助S8说明符号。

UTF-8?支持中文字符,且跨平台。

vs默认先识别BOM(找不到就按GBK格式编译,这就坑了UTF-8),再选择编码格式是不是UTF-8,推荐vs编译编码格式 UTF-8?BOM。(博客其他篇幅中详述,vs怎么用UTF-8:原理是:加一句话告诉编译器别瞎整,全文就是UTF-8!别瞎搞!)

如上图,项目是用utf-8编码格式,但是调试窗口,中文显示乱码;

原因:调试窗口还假定文本是在本地窄字符集中编码的,换句话说?调试窗口编码是GB2312

解决办法:

幸运的是,有's8'?格式说明符,这种方法可以显示正确的值。如果我们将',s8'附加到变量名称,Visual Studio将以UTF-8重新分析文本并正确呈现文本:(双击,Name下面的字段,加上,s8?)

要说明的是's8'格式说明符适用于普通字符数组,但不适用于std :: string变量。我去年向微软报告了这一点,但他们显然已将其修改为未来版本的Visual Studio。

那string怎么处理呢?我采用了曲线绕过的办法,如下图(先c_str()再,s8)

写在最前:

??控制台输出中文乱码,完全是跟win10操作系统有关,跟VS基本无关,所以网上大量的用VS下载安装更新的解决办

法是事倍功半的(而且不一定成功),本文的方法只需几个简单的步骤,就能解决中文乱码问题,简单明快。

??本文参考blog,感谢网友的经验分享,但是由于最新的win10对控制台默认选项做出了更改,所以我在此基础上,对

乱码问题的解决作出了更新。

这是我遇到的中文输出为??????的情况; 在任务栏最左端找到windows健,右击它; 点击“运行”; 输入“cmd”,确定; 之后弹出控制台窗口,在控制台顶端的工具栏(鼠标放在任意白色区域)右击,在弹出的窗口中选择“默认值”; 进入“控制台窗口属性”页面后,将红框中的内容打勾; 确定,然后回到VS,再次调试运行,乱码问题完美解决!;

首先,先解决第一个问题,我们使用VS2010开发的时候,调试的时候,中文打印出来都是乱码,这个问题很纠结。

如下图:

CCLOG("cclog: 测试使用标签的自动换行和个别字体大写");LOGNEWLINE;

输出结果如下图:

cocos2d.x.version: 2.1rc0-x-2.1.4

cocos2d.x.compiled_with_profiler: false

cocos2d.x.compiled_with_gl_state_cache: true

gl.vendor: NVIDIA Corporation

gl.renderer: GeForce 310M/PCIe/SSE2

gl.version: 3.3.0

gl.max_texture_size: 8192

gl.max_texture_units: 96

gl.supports_PVRTC: false

gl.supports_NPOT: true

gl.supports_BGRA8888: false

gl.supports_discard_framebuffer: false

gl.supports_vertex_array_object: true

cclog: ?????????????????к?????????д

?

这是很大的一个问题,是吗?英语不是很熟练的小伙伴们?

不得不说,VS2010这个开发工具没说的,真是开发者的杯具开始。尤其是对我使用MAC非常熟悉的人来说。

好的,废话不说,看下怎么使用控制台来调试我们的代码,能够正常输入中文。

这里需要配置main.c,通过它来调出控制台输出中文,但是有一点限制,就是必须使用cout 或者 printf ,而不能使用CCLog。

直接贴出代码:

?

#include "main.h"

#include "AppDelegate.h"

#include "CCEGLView.h"

#include "net/NetWork.h"

#include "adapter/RouterAdapter.h"

USING_NS_CC;

#define USE_WIN32_CONSOLE

int APIENTRY _tWinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPTSTR lpCmdLine,

int nCmdShow)

{

UNREFERENCED_PARAMETER(hPrevInstance);

UNREFERENCED_PARAMETER(lpCmdLine);

#ifdef USE_WIN32_CONSOLE

AllocConsole();

freopen("CONIN$","r",stdin);

freopen("CONOUT$","w",stdout);

freopen("CONOUT$","w",stderr);

#endif

// create the application instance

CCEGLView* eglView = CCEGLView::sharedOpenGLView();

eglView->setViewName("MT");

//eglView->setFrameSize(480,320);

return CCApplication::sharedApplication()->run();

#ifdef USE_WIN32_CONSOLE

FreeConsole();

#endif

}

通过这个USE_WIN32_CONSOLE来实现我们的代码调试。测试代码如下

CCLOG("cclog: 测试使用标签的自动换行和个别字体大写");LOGNEWLINE;

printf("printf: 测试使用标签的自动换行和个别字体大写");LOGNEWLINE;

VS2010输出窗口如下:

cocos2d.x.version: 2.1rc0-x-2.1.4

cocos2d.x.compiled_with_profiler: false

cocos2d.x.compiled_with_gl_state_cache: true

gl.vendor: NVIDIA Corporation

gl.renderer: GeForce 310M/PCIe/SSE2

gl.version: 3.3.0

gl.max_texture_size: 8192

gl.max_texture_units: 96

gl.supports_PVRTC: false

gl.supports_NPOT: true

gl.supports_BGRA8888: false

gl.supports_discard_framebuffer: false

gl.supports_vertex_array_object: true

cclog: ?????????????????к?????????д

为什么只是输出CCLog,printf 呢?

?

看下控制台,如下:

?

?

然后是第二个问题,模拟器上竟然也是乱码!!!如果英语很好,在调试的时候,可以使用英文代替,但是到了开发的时候了,模拟器上中文竟然也是乱码??!

这是造的。

测试代码:

CCLabelTTF *testLabel = CCLabelTTF::create("测试使用标签的自动换行和个别字体大写,test","Zapfino",30);

testLabel->setPosition(ccp(visibleSize.width*0.5,visibleSize.height*0.2));

testLabel->setColor(ccc3(200,200,200));

this->addChild(testLabel,1);

?

模拟器运行如下图:

有了时间在写,很快。

?

?

?

?

?

?

?

?

?

?

?

转载于:https://www.gestaodocondominio.net/james1207/p/3320106.html