CrossApp之VS2013不能输出中文,乱码,附加源码(一)

VS2013可以使用iconv,也可以使用宽字节的方式来处理。

代码才是王道,直接贴了。。。

//
//  UTF8ToGBK.h
//  UTF8ToGBK
//
//  Created by kevin.
//
#pragma once

#include <iostream>
#include <stdio.h>
//string是c++ 的头文件,其内包含了一个string类,string s1就是建立一个string类的对象
#include <string>
//cstring.h 是对应于旧C 头文件的std 版本
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
   #include <cstringt.h>
#else
   #include "cstring"
#endif

#include <locale>

#define LOG_NEW_LINE printf("\n")
using namespace std;

class UTF8ToGBK
{
public:
	UTF8ToGBK(void);
	~UTF8ToGBK(void);

	//将unicode编码的string转换成wstring
	static wstring stringToWstring(const string text);

	//将utf8格式编码转化成gbk,vs2010的默认的编码格式
	static string transferToGbk(const string text);
};
//
//  UTF8ToGBK.cpp
//  UTF8ToGBK
//
//  Created by kevin.
//
#include "UTF8ToGBK.h"

UTF8ToGBK::UTF8ToGBK(void)
{
}

UTF8ToGBK::~UTF8ToGBK(void)
{
}

//将string转换成wstring
wstring UTF8ToGBK::stringToWstring(const string str)
{
	setlocale(LC_ALL, "chs");
	const char* _Source = str.c_str();
	size_t _Dsize = str.size() + 1;
	wchar_t *_Dest = new wchar_t[_Dsize];
	wmemset(_Dest, 0, _Dsize);
	mbstowcs(_Dest,_Source,_Dsize);
	std::wstring result = _Dest;
	delete []_Dest;
	setlocale(LC_ALL, "C");
	return result;
}

//当在WIN32 平台下,将utf8格式编码转化成gbk,vs2010的默认的编码格式
string UTF8ToGBK::transferToGbk(const string text)
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)

	wstring tes = stringToWstring(text);

	int asciSize = WideCharToMultiByte(CP_UTF8,0,tes.c_str(),tes.size(),NULL,0,NULL,NULL);
	if (asciSize == ERROR_NO_UNICODE_TRANSLATION || asciSize == 0)
	{
		return string();
	}

	char *resultString = new char[asciSize];
	int conveResult = WideCharToMultiByte(CP_UTF8,0,tes.c_str(),tes.size(),resultString,asciSize,NULL,NULL);
	if (conveResult != asciSize)
	{
		return string();
	}
	string buffer = "";
	buffer.append(resultString,asciSize);

	delete[] resultString;
	return buffer;
#else
	return text;
#endif

	return text;
}

okk,测试代码如下,就拿一键创建的工程来做个示范。

void FirstViewController::viewDidLoad()
{
    // Do any additional setup after loading the view from it's nib.
	CCRect winRect = this->getView()->getBounds();
    CAImageView* imageView = CAImageView::createWithImage(CAImage::create("HelloWorld.png"));
    imageView->setFrame(winRect);
    this->getView()->addSubview(imageView);

    CALabel* label = CALabel::createWithCenter(CCRect(winRect.size.width*0.5, winRect.size.height*0.5-270, winRect.size.width, 200));
    label->setTextAlignment(CATextAlignmentCenter);
    label->setVerticalTextAlignmet(CAVerticalTextAlignmentCenter);
    label->setFontSize(72 * CROSSAPP_ADPTATION_RATIO);
	label->setText(UTF8ToGBK::transferToGbk("你好啊!").c_str());
    label->setColor(CAColor_white);
    this->getView()->insertSubview(label, 1);

	for (int i = 0; i < 100;i++	)
	{
		CCLog("%s : %d", UTF8ToGBK::transferToGbk("这是一个测试,童鞋!").c_str(),i);
	}

}

CrossApp之VS2013不能输出中文,乱码,附加源码(一)

时间: 2024-11-09 10:52:06

CrossApp之VS2013不能输出中文,乱码,附加源码(一)的相关文章

.Net Core 控制台输出中文乱码

Net Core 控制台输出中文乱码的解决方法: public static void Main(string[] args)        {            Console.OutputEncoding = System.Text.Encoding.UTF8;//第一种方式:指定编码            //Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);//第二种方式                    

resin后台输出中文乱码的解决办法!

最近从tomcat移植到resin,发现这东西不错啊! 只是后台输出时有时候中文会乱码. 现在找到resin后台输出中文乱码的解决办法: 编辑conf/resin.con文件: <!--javac compiler="internal" args="-source 1.5"/--> 修改成这样: <javac compiler="javac" args="-encoding utf-8"/> 重启服务器

VS2010中wmain入口函数中使用wprintf输出中文乱码问题

生活中的单例 中国(China),位于东亚,是一个以华夏文明为主体.中华文化为基础,以汉族为主要民族的统一多民族国家,通用汉语.中国疆域内的各个民族统称为中华民族,龙是中华民族的象征.古老的中国凭借自身的发展依旧美丽的屹立于东方民族之林,闪耀着她动人的光彩,世界上只有一个中国,任何部分都是祖国不可分割的一部分,今天我们的设计模式就从伟大的祖国开始说起---单例模式. 详解单例模式 单例模式是什么?跟我们的祖国有着怎样的关系呢?首先我们来看一下单例,从"单例"字面意思上理解为-一个类只有

Java应用程序中System.out.println输出中文乱码

Java应用程序中System.out.println输出中文乱码 2013-12-10 21:27:08cnblogs.com-bluepoint2009-点击数:3631 其实,解决办法比较简单,即:编译时指定编码为UTF-8,如: 1 javac -encoding utf-8 HelloJava.java 这样,再运行时就不会出现乱码. 一.中文问题的来源 计算机最初的操作系统支持的编码是单字节的字符编码,于是,在计算机中一切处理程序最初都是以单字节编码的英文为准进行处理.随着计算机的发

在Servlet中出现一个输出中文乱码的问题(已经解)。

在Servlet中出现一个输出中文乱码的问题,已经解. @Override public void doPost(HttpServletRequest reqeust, HttpServletResponse response) throws ServletException, IOException { //PrintWriter out = response.getWriter();在还没有给response指定编码格式时就获取了他的输出流,所以一直乱码 reqeust.setCharact

编码(ACSII unicod UTF-8)、QT输出中文乱码深入分析

总结: 1. qt输出中文乱码原因分析 qt的编程环境默认是utf-8编码格式(关于编码见下文知识要点一): cout << "中文" << endl; 程序运行,程序并不认识ANSI,UTF-8以及任何其他编码.系统只知道处理你给它的字符的二进制表示. 关于  "中""文" 的3种编码二进制内容: ANSI(GBK): 0xd6d0  0xcec4 UTF-8: 0xe4b8ad 0xe69687 Unicode: 0x

python2输出中文乱码问题

python2输出中文乱码问题 1.在源码文件第一行添加 #-*-coding:utf-8-*- 或  #encoding=utf-8 或  #encoding=UTF-8 注意:一定要在第一行! 2.在字符串前加 ' u ' 例: spring=u"这是一个测试字符串" 3.若上述2种方式仍然不能保证能输出正常输出中文,就需要做编码解码设置 即 encode: 编码(真实字符与二进制串的对应关系,真实字符→二进制串) decode: 解码(二进制串与真实字符的对应关系,二进制串→真实

解决IntelliJ IDEA控制台输出中文乱码问题

一.问题情况: IntelliJ IDEA 控制台输出中文乱码部分如图所示: 找到intellij idea的file---settings---Editor---FileEncodings的GlobalEncoding和ProjectEncoding和Default encoding for properties都配置成UTF-8 在部署Tomcat的VM options项中添加:-Dfile.encoding=UTF-8 重启Intellij idea即可解决乱码问题 原文地址:https:

idea中tomcat控制台输出中文乱码问题的解决

idea中tomcat控制台输出中文乱码问题的解决 每次用新的tomcat和idea都会遇到tomcat控制台中文乱码问题,故在此整理. 基本上都是需要修改tomcat的启动参数(如果本身idea编码都统一设置为utf-8了) 打开tomcat下的bin目录,找到catalina.bat文件 找到 JAVA_OPTS 参数,在其中加上 -Dfile.encoding=UTF-8(用的7.0.82版本的设置为UTF-8,8.0.20版本的需要设置为GBK,目前不知道原因,可能是组件的编码有变化)