截取包含多字节字符的字符串

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 deltacat 的 blog

自己写的一个函数。

如果字符串中含有中文,简单截取会出现乱码,简单的做法是,把它先转换成宽字符然后截取,完成后再转回来。当然,对于本身是unicode的程序,直接截取就行了,不必转换。

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

bool truncstringleft(lptstr lpszsource, int ncnt)
{
 atlassert(lpszsource);
 if(null == lpszsource || ncnt <1 || !lpszsource[0])
  return false;

 wchar wszwide[max_path * 2];
#ifdef unicode
 _tcscpy(wszwide, lpszsource);
#else
 multibytetowidechar(cp_acp, 0, lpszsource, -1, wszwide, arraysize(wszwide));
#endif
 
 if(wcslen(wszwide)>ncnt)
  wszwide[ncnt] = 0;

#ifdef unicode
 _tcscpy(lpszsource, wszwide);
#else
 widechartomultibyte(cp_acp, 0, wszwide, -1, lpszsource, max_path, null, null);
#endif

 return true;
}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

一些相关的讨论:
http://dev.csdn.net/develop/article/66/66387.shtm
http://community.csdn.net/expert/topic/3906/3906053.xml?temp=.4827692

本文关键:截取包含多字节字符的字符串
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top