Unicode和GB2312的相互转化

OoCocosoO 2013-02-20 02:34:07
谁能给我一些代码或者资料.谢谢
...全文
275 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sduxiaoxiang 2013-02-21
  • 打赏
  • 举报
回复
iconv 非windows系统基本都带这个
赵4老师 2013-02-21
  • 打赏
  • 举报
回复
引用 4 楼 yirancpp 的回复:
不可以使第三方库
http://www.microsoft.com/visualstudio/chs/downloads#d-2010-express 点开Visual C++ 2010 Express下面的语言选‘简体中文’,再点立即安装 再参考 C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\cvt\*.*
wdx04 2013-02-21
  • 打赏
  • 举报
回复
用C++标准库(要求较新的C++编译器) http://wdx04.blog.51cto.com/288327/1022220
qq120848369 2013-02-20
  • 打赏
  • 举报
回复
先理解编码。。。 否则很难继续下去,真的。
OoCocosoO 2013-02-20
  • 打赏
  • 举报
回复
不可以使第三方库
haozi596 2013-02-20
  • 打赏
  • 举报
回复
我曾经写过···
#include "codechange.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>
#include <locale.h>

wchar_t *ANSITOUnicode(const char* str){
	int textlen = 0;
	wchar_t *result = NULL;
	textlen = MultiByteToWideChar(CP_ACP,0,str,-1,NULL,0);
	result = (wchar_t*)malloc((textlen+1)*sizeof(wchar_t));
	memset(result,0,(textlen+1)*sizeof(wchar_t));
	MultiByteToWideChar(CP_ACP,0,str,-1,(LPWSTR)result,textlen);
	return result;
}

char *UnicodeToANSI(const wchar_t *str){
	char *result = NULL;
	int textlen = 0;
	textlen = WideCharToMultiByte(CP_ACP,0,str,-1,NULL,0,NULL,NULL);
	result = (char*)malloc((textlen+1)*sizeof(char));
	memset(result,0,sizeof(char)*(textlen+1));
	WideCharToMultiByte(CP_ACP,0,str,-1,result,textlen,NULL,NULL);
	return result;
}

wchar_t *Utf8ToUnicode(const char* str){
	int textlen = 0;
	wchar_t *result = NULL;
	textlen = MultiByteToWideChar(CP_UTF8,0,str,-1,NULL,0);
	result = (wchar_t *)malloc((textlen+1)*sizeof(wchar_t));
	memset(result,0,(textlen+1)*sizeof(wchar_t));
	MultiByteToWideChar(CP_UTF8,0,str,-1,(LPWSTR)result,textlen);
	return result;
}

char* UnicodeToUTF8(const wchar_t* str){
	char *result = NULL;
	int textlen = 0;
	textlen = WideCharToMultiByte(CP_UTF8,0,str,-1,NULL,0,NULL,NULL);
	result = (char*)malloc((textlen+1)*sizeof(char));
	memset(result,0,sizeof(char)*(textlen+1));
	WideCharToMultiByte(CP_UTF8,0,str,-1,result,textlen,NULL,NULL);
	return result;
}

wchar_t* m2w(const char* mbs){
	int len = 0;
	wchar_t* buf;
	len = mbstowcs(NULL,mbs,0);
	if (len == 0)
		return NULL;
	buf = (wchar_t*)malloc(sizeof(wchar_t)*(len+1));
	memset(buf,0,sizeof(wchar_t*)*(len+1));
	len = mbstowcs(buf,mbs,len+1);
	return buf;
}

char* ANSIToUTF8(const char* str){
	return UnicodeToUTF8(ANSITOUnicode(str));
}

char* UTF8ToANSI(const char* str){
	return UnicodeToANSI(Utf8ToUnicode(str));
}
图灵狗 2013-02-20
  • 打赏
  • 举报
回复
用iconv很轻松,参考(http://www.cnblogs.com/xuxm2007/archive/2010/11/09/1872379.html)的用法。
cy2015yc 2013-02-20
  • 打赏
  • 举报
回复

// 功能: ANSI字符串转换为WideChar
// 参数:[in]szANSI - 被转换的ANSI字符串
// 返回值: wchar_t* 转换后的widechar字符串指针,调用者需要delete
wchar_t* CUtility::ANSIToWideChar( const char* szANSI )
{
	ASSERT(szANSI != NULL);

	int unicodeLen = ::MultiByteToWideChar(CP_ACP, 0, szANSI, -1, NULL, 0);
	wchar_t* pUnicode = new wchar_t[unicodeLen+1];
	memset(pUnicode, 0x00, sizeof(wchar_t)*(unicodeLen+1));
	::MultiByteToWideChar(CP_ACP, 0, szANSI, -1, pUnicode, unicodeLen);

	return pUnicode;
}

// 功能: WideChar字符串转换为ANSI
// 参数:[in]szWidechar - 被转换的WideChar字符串
// 返回值: char* 转换后的ANSI字符串指针,调用者需要delete
char* CUtility::WideCharToANSI( const wchar_t* szWidechar )
{	
	ASSERT(szWidechar != NULL);

	int widecharLen = ::WideCharToMultiByte(CP_ACP, 0, szWidechar, -1, NULL, 0, NULL, NULL);
	char* pAnsi = new char[widecharLen+1];
	memset(pAnsi, 0x00, widecharLen+1);
	::WideCharToMultiByte(CP_ACP, 0, szWidechar, -1, pAnsi, widecharLen, NULL, NULL);

	return pAnsi;
}
多字节和Unicode的相互转换,供参考

65,187

社区成员

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

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