C语言下Unicode字符串与多字节字符串转换方法

原创 2013年12月05日 16:52:40

1.Unicode字符串转换为多字节字符串:

size_t wlen = 0;
wchar_t *wstr = (wchar_t*)pSrc; //source unicode string
size_t byteLen =0; //unicode string length in byte 
size_t coverted = 0;
char retBuf[MODEL_CODEC_MAX_VALUE_LEN];
ST_RET ret = SD_FAILURE;


setlocale(LC_ALL,"chs");//setlocale(LC_ALL,"chs")会改变整个应用程序的字符集编码方式,调用完之后使用 //setlocale(LC_ALL,"C")还原。
wlen = wcslen(wstr);
byteLen = wlen * 2 + 1;

memset(retBuf,0,MODEL_CODEC_MAX_VALUE_LEN);
if(0 != wcstombs_s(&coverted,retBuf,MODEL_CODEC_MAX_VALUE_LEN,wstr,_TRUNCATE))
{
ret = SD_FAILURE;
}
else
{
ret = SD_SUCCESS;
}
setlocale(LC_ALL,"C");
assert(strlen(retBuf) < MODEL_CODEC_MAX_VALUE_LEN);
if(ret == SD_SUCCESS)
{
if(0 != strncpy_s(text,MODEL_CODEC_MAX_VALUE_LEN,retBuf,MODEL_CODEC_MAX_VALUE_LEN))
{
ret = SD_FAILURE;
}
}
return ret;

2.多字节字符串转换为Unicode字符串

setlocale(LC_ALL,"chs");
size_t len = strlen(text);
size_t converted = 0;
const int retLen = 512/sizeof(wchar_t);
wchar_t *retBuf = new wchar_t[retLen];
memset(retBuf,0,retLen);
bool ret = false;
if (0 != mbstowcs_s(&converted,retBuf,retLen,str,_TRUNCATE))
{
ret = false;
}
else
{
ret = true;
}
setlocale(LC_ALL,"C");
if (ret == true)
{
if (0 != wcsncpy_s(wstr,wcslen(retBuf)+1,retBuf,wcslen(retBuf)))
{
ret = false;
}
}
delete [] retBuf;
retBuf = 0;
return ret;

相关文章推荐

C/C++多字节字符与宽字符的输出

使用C++标准库的iostream,可以方便地将控制台、文件、字符串以及其它可扩充的外部表示作为流来处理,但要处理中文,却会碰到很多问题。本人原来没怎么用过这个iostream,这几天尝试用这个写点东...
  • gonxi
  • gonxi
  • 2010年10月10日 09:59
  • 3743

c++宽字符和多字节字符相互转化类

多字节字符(multibyte character):每个字符可以是一到多个字节不等,而某个字节序列的字符值由字符串或流(stream)所在的环境背景决定。        宽字符:对宽字符的支持其实...
  • lgp88
  • lgp88
  • 2011年12月08日 15:15
  • 2078

C/C++中ASCII与Unicode字符串相互转换

1、ASCII to Unicode 函数:wcstombs(VC6)、wcstombs_s 实例: // crt_wcstombs_s.c // This example converts...
  • wbq2018
  • wbq2018
  • 2013年04月15日 22:58
  • 3083

Visual Studio中C++关于Unicode字符集和多字节字符集

1.Unicode字符集     原本标准字符集为8位的ASCII码,但世界上的书写语言不能简单地用256个8位代码即一字节表示,就试更宽的值,例如16位值。这就是Unicode非常简单的原理。与混乱...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Unicode字符与多字节字符的转换

第一个就是宽字符到多字节字符转换函数,函数原型如下: int WideCharToMultiByte( UINT CodePage, DWORD dwFlags, LPCWSTR lpWideChar...

UNICODE与多字节字符集的区别及转换

一、一点历史 在计算机中字符通常并不是保存为图像,每个字符都是使用一个编码来表示的,而每个字符究竟使用哪个编码代表,要取决于使用哪个字符集(charset)。 在最初的时候,Internet...

C++字符串之间转化——多字节字符集

一、字符串之间转化 1.string、char*与 const char* string->char* char *ctr = new char[str.length()+1]; s...

c++ 多字节 转换为 unicode

Unicode的出现是为了适应软件国际化的需要。Unicode不同于双字节字符集(DBCS)。 一、相关操作函数        1、DBCS使用下面的函数操作字符串:           ...

多字节字符串与UNICODE字符串的互相转换

多字节字符串转换为UNICODE字符串
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言下Unicode字符串与多字节字符串转换方法
举报原因:
原因补充:

(最多只允许输入30个字)