精华内容
下载资源
问答
  • //GBKUTF8 string CAppString::GBKToUTF8(const string & strGBK) { string strOutUTF8 = ""; WCHAR * str1; int n = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0); ...
    
    
    //GBK转UTF8
    string CAppString::GBKToUTF8(const string & strGBK)  
    {
        string strOutUTF8 = "";
        WCHAR * str1;
        int n = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0);
        str1 = new WCHAR[n];
        MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, str1, n);
        n = WideCharToMultiByte(CP_UTF8, 0, str1, -1, NULL, 0, NULL, NULL);
        char * str2 = new char[n];
        WideCharToMultiByte(CP_UTF8, 0, str1, -1, str2, n, NULL, NULL);
        strOutUTF8 = str2;
        delete []str1;
        str1 = NULL;
        delete []str2;
        str2 = NULL;
        return strOutUTF8;
    }
    
    //UTF8转GBK
    string CAppString::UTF8ToGBK(const std::string & strUTF8)  
    {  
        int len = MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, NULL, 0);  
        unsigned short * wszGBK = new unsigned short[len + 1];  
        memset(wszGBK, 0, len * 2 + 2);  
        MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)strUTF8.c_str(), -1, (LPWSTR)wszGBK, len);  
    
        len = WideCharToMultiByte(CP_ACP, 0, (LPWSTR)wszGBK, -1, NULL, 0, NULL, NULL);  
        char *szGBK = new char[len + 1];  
        memset(szGBK, 0, len + 1);  
        WideCharToMultiByte(CP_ACP,0, (LPWSTR)wszGBK, -1, szGBK, len, NULL, NULL);  
        //strUTF8 = szGBK;  
        std::string strTemp(szGBK);  
        delete[]szGBK;  
        delete[]wszGBK;  
        return strTemp;  
    }
    
    //宽字符转窄
    string CAppString::Unicode2ACSII(const wstring & strSource)
    {
        string strDest("");
        if (strSource.empty())
        {
            return strDest;
        }
    
        int nlen = ::WideCharToMultiByte(CP_ACP, 0, strSource.c_str(), -1, NULL, 0, NULL, NULL);
        char * szDest = new char[nlen + 1];
        ::WideCharToMultiByte(CP_ACP, 0, strSource.c_str(), -1, szDest, nlen, NULL, NULL);
        strDest = szDest;
        delete szDest;
        szDest = NULL;
    
        return strDest;
    }
    
    //窄字符转宽字符
    wstring CAppString::ASCII2Unicode(const char* strSrc)
    {
    	wchar_t*  pElementText = NULL;
    	int  nTextLen = 0;
    	// multi char to wide char
    	nTextLen = MultiByteToWideChar( CP_ACP,	0, strSrc, -1, NULL, 0 );
    	pElementText = new wchar_t[nTextLen + 1];
    	memset(( void* )pElementText, 0, sizeof( wchar_t ) * ( nTextLen + 1 ) );
    	::MultiByteToWideChar(CP_ACP, 0, strSrc, -1, pElementText, nTextLen);
    	wstring sText;
    	sText = pElementText;
    	delete[] pElementText;
    	return sText;
    }

    转载于:https://www.cnblogs.com/yuzhould/p/4454255.html

    展开全文
  • size_t i; Char AppDirectory[300]; Wchar GetAppDirectory; errno_t einval= wcstombs_s(&i, AppDirectory, 300, GetAppDirectory, wcslen...当GetAppDirectory中有中文字符时,转换会出现问题,如“as\桌面...

    size_t   i;

    Char AppDirectory[300];

    Wchar GetAppDirectory;

    errno_t einval= wcstombs_s(&i,  AppDirectory, 300, GetAppDirectory, wcslen(GetAppDirectory));

    GetAppDirectory中有中文字符时,转换会出现问题,如“as\桌面\ass.log,使用上面函数转化后AppDirectory结果为“as\桌面\ass.l”。原因是wcslen(GetAppDirectory)的结果是13,而wcstombs_s中第5个参数是最大字节数。解决办法是使用默认值_TRUNCATE。即

    errno_t einval= wcstombs_s(&i,  AppDirectory, 300, GetAppDirectory, _TRUNCATE);

    转载于:https://www.cnblogs.com/fairycao/archive/2009/12/04/1616862.html

    展开全文
  • CString szAreaInfo; CW2AEX<>(szAreaInfo,CP_UTF8); 最好能像上面这样转换,否则汉字就会成乱码。 转载于:https://www.cnblogs.com/chunyou128/p/3886483.html
    CString szAreaInfo;
    CW2AEX<>(szAreaInfo,CP_UTF8);
    

     最好能像上面这样转换,否则汉字就会转成乱码。

    转载于:https://www.cnblogs.com/chunyou128/p/3886483.html

    展开全文
  • 宽字符窄字符的转换接口

    千次阅读 2012-08-16 18:45:42
    作者:朱金灿来源:http://blog.csdn.net/clever101 宽字符窄字符的转换需求很经常会遇到,今天从网上找了两个函数,修改了一下,奉献给大家。#include #include std::wstring toWideString( const char* pStr...

    作者:朱金灿

    来源:http://blog.csdn.net/clever101

     

         宽字符和窄字符的转换需求很经常会遇到,今天从网上找了两个函数,修改了一下,奉献给大家。

    #include <string>
    #include <assert.h>
    
    std::wstring toWideString( const char* pStr,int len)
    {
    	assert(pStr) ; 
    	assert(len >= 0 || len == -1, _T("Invalid string length: ") << len ) ;
    
    	// figure out how many wide characters we are going to get 
    	int nChars = MultiByteToWideChar( CP_ACP , 0 , pStr , len , NULL , 0 ) ; 
    	if ( len == -1 )
    		-- nChars ; 
    	if ( nChars == 0 )
    		return L"" ;
    
    	// convert the narrow string to a wide string 
    	// nb: slightly naughty to write directly into the string like this
    	std::wstring buf;
    	buf.resize(nChars); 
    	::MultiByteToWideChar(CP_ACP,0,pStr,len,const_cast<wchar_t*>(buf.c_str()),nChars); 
    
    	return buf ;
    }
    
    std::wstring toWideString(const std::string& strA)
    {
    	const char* pStr = strA.c_str();
    	int len = strA.length();
        return toWideString(pStr,len);
    }
    
    std::string toNarrowString( const wchar_t* pStr,int len)
    {    
    	// figure out how many narrow characters we are going to get 
    	assert(pStr) ; 
    	assert(len >= 0 || len == -1 , _T("Invalid string length: ") << len ) ; 
    
    	int nChars = WideCharToMultiByte( CP_ACP , 0 , 
    		pStr , len , NULL , 0 , NULL , NULL ) ; 
    	if ( len == -1 )
    		-- nChars ; 
    	if ( nChars == 0 )
    		return "" ;
    
    	// convert the wide string to a narrow string
    	// nb: slightly naughty to write directly into the string like this
    	std::string buf ;
    	buf.resize(nChars);
    	WideCharToMultiByte(CP_ACP,0,pStr,len,const_cast<char*>(buf.c_str()),nChars,NULL,NULL); 
    
    	return buf ; 
    }
    
    std::string toNarrowString(const std::wstring& strW)
    {
    	const wchar_t* pStr = strW.c_str();
    	int len = strW.length();
        return toNarrowString(pStr,len);
    }
    
    

          有问题或者更好意见的话请联系我。

     

    参考文献:

     

    1. 如何升级基于STL的应用来支持Unicode


    展开全文
  • 最近在看opencv,无奈老外开发的东西TMD居然没有宽字符版本。 比如一个最简单的读取位图文件的Mat imread( const string& filename, int flags=1 );MSDN对转换宏介绍的不清不楚的,看源文件吧/*atlconv.h*/ #ifdef ...
  • 宽字符窄字符之间的转换

    千次阅读 2016-12-15 10:56:34
    // 窄字符串转化为宽字符串,结果数据保存到第二个参数中,因此要在调用函数之前申请好空间 // BOOL WINAPI Ansi2Unicode(__in PCHAR pAnsi, __out PWCHAR pUnicode, __in DWORD dwStrLen) { DWORD dwNum = 0; BOOL...
  • 宽字符窄字符

    2014-03-24 22:14:00
    什么是宽字符窄字符 (1) 一个ANSI字符占一个字节共8位,一个UNICODE字符占两个字节共16位;ANSI字符串以’\0’结束,0x00。#Q:UNICODE字符串以什么结束??#A:UNICODE字符串以L”\0”结束,0x0000。 (2)...
  • VS中常见的宽字符窄字符转换

    千次阅读 2016-08-25 09:02:11
    VS常见的宽字符wchar和char之间的转换
  • 宽字符窄字符的处理

    千次阅读 2014-08-06 17:15:29
    >Unicode是传递字符串的最佳手段。 2. C标准库中与wchar_t相关的文件: 《windows核心编程》 1) 文件”string.h”定义了wchar_t数据类型: {{{  typedef unsignedshort wchar_t; }}} 2) 标准的ANSI C函数...
  • Unicode字符集环境下亲测可用://------------------------------------------------------------------宽字符串转换到窄字符串 char* pC = NULL; wchar_t wStr[20] = L"宽字符串"; int iLen = ...
  • 窄字符转宽字符

    千次阅读 2013-08-28 22:02:04
    最常用的转换 A 为窄字符 W 为宽字符:  A to W 的方式有:  W = _T(“A”) ;W = TEXT(“A”); W = L”A”;W = A2W(A);  W to A 的方式有:  A = W2A(W) ;A = W2BSTR(W) ;  此外: wchar_t* ...
  • 字符编码转换(支持跨平台) std::string AnsiToUtf8(const char * ansi){ #ifdef WIN32 int len = MultiByteToWideChar(CP_ACP, 0, ansi, -1, NULL, 0); wchar_t* wstr = new wchar_t[len+1]; memset(wstr, 0...
  • C++ 之宽字符窄字符

    2016-05-20 17:39:33
    今天这个问题困扰了我好久,其实对于一个初学者来说,不必专研的太深,大致理解如下就可以了:窄字符就是用一个字节表示一个字符,宽字符就是用≥2个字节表示一个字符。 比如(以Windows下小端存储为例) char c=...
  • 你应该这样做:inline std::wstring convert(const std::string& as){// deal with trivial case of empty stringif(as.empty()) return std::wstring();// determine required length of new stringsize_t ...
  • 开发iOS通讯录项目,遇到一个tableview 索引的问题。 测试同学发现一个bug:添加一个名字为宽字符A不能归并到索引A的section中,而是使用了添加了一个叫A的索引
  • 关于宽字符窄字符

    2009-05-05 10:28:35
    宽窄字符与UTF16,UTF8不是对应的关系。宽窄字符是与一个字符所占的字节数有关,如果一个字符只占一个字节,那么那么它就是窄字符,一个宽字符通常占2个字节。在c/c++/objective c中,如果你想把一个窄字...
  • 原文地址:ANSI字符,UNICODE,宽字符,窄字符,多字节字符集作者:bluepig111111 Unicode :宽字节字符集  1. 如何取得一个既包含单字节字符又包含双字节字符的字符串的字符个数?  可以调用Microsoft ...
  • Windows核心思想-宽字符窄字符(Unicode和ASCII)

    千次阅读 多人点赞 2019-04-29 09:33:06
    宽字符:Unicode字符,双字节 窄字符:ASCII字符,单字节 Windows中所有的底层函数都是Unicode编码 COM组件必须使用Unicode编码(COM组件可以理解为DLL,主要是用于代码重用); 比如在Windows API中: ...
  • Unicode :字节字符集  1. 如何取得一个既包含单字节字符又包含双字节字符字符串的字符个数?  可以调用Microsoft Visual C++的运行期库包含函数_mbslen来操作多字节(既包括单字节也包括双字节)字符串。 ...
  • 宽字符窄字符的一个坑

    千次阅读 2017-02-08 21:39:15
    学习Windows编程的时候,遇到字符串处理会让人非常抓狂,当然问题的根本还是自己学艺不精,不过还是得吐槽一下,造成这一局面的原因是规则变化多端而又有点不可捉摸,这不,最近就掉到坑里面去了。 先看看下面的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,059
精华内容 4,023
关键字:

宽字符转窄字符