user-0 提问: 多字节与宽字符相混字符串 解码

回复:
user: user-0
content: 忘了结了~~

user: user-1
content: 对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A

user: user-2
content: 引用 8 楼 erave5 的回复:[quote=引用 7 楼 zjq9931 的回复:] [quote=引用 6 楼 erave5 的回复:] [quote=引用 5 楼 zjq9931 的回复:] [quote=引用 4 楼 erave5 的回复:] 可能 是我没有说清楚，我要转化的字符串里面，不是纯的多字节或宽字符，而是多字节和宽字符的混合。 可能是这样的字符串：一串多字节+一串宽字符+一串多字节+一串宽字符，怎么分割？ 以00，作为特征，或者换行作为特征来区分，只能这样了。[/quote] 感谢回复！对于英文用00作为特征应该没有问题，但里面还会有中文，怎么区分？ [/quote] 宽字元中文和多字节中文中间没有分割？[/quote] 中文在GB2312和Unicode-16编码中都是2字节。 比如“爱”字，多字节：0xb0ae ;宽字符：0x3172 我对编码不是很了解，不太清楚是不是有一定的规则可以判断。 [/quote] 如果完全没有分割，如换行，空格做间隔，那肯定没有办法区分了。 或者把数据传上来分析一下。

user: user-0
content: 引用 7 楼 zjq9931 的回复:[quote=引用 6 楼 erave5 的回复:] [quote=引用 5 楼 zjq9931 的回复:] [quote=引用 4 楼 erave5 的回复:] 可能 是我没有说清楚，我要转化的字符串里面，不是纯的多字节或宽字符，而是多字节和宽字符的混合。 可能是这样的字符串：一串多字节+一串宽字符+一串多字节+一串宽字符，怎么分割？ 以00，作为特征，或者换行作为特征来区分，只能这样了。[/quote] 感谢回复！对于英文用00作为特征应该没有问题，但里面还会有中文，怎么区分？ [/quote] 宽字元中文和多字节中文中间没有分割？[/quote] 中文在GB2312和Unicode-16编码中都是2字节。 比如“爱”字，多字节：0xb0ae ;宽字符：0x3172 我对编码不是很了解，不太清楚是不是有一定的规则可以判断。

user: user-2
content: 引用 6 楼 erave5 的回复:[quote=引用 5 楼 zjq9931 的回复:] [quote=引用 4 楼 erave5 的回复:] 可能 是我没有说清楚，我要转化的字符串里面，不是纯的多字节或宽字符，而是多字节和宽字符的混合。 可能是这样的字符串：一串多字节+一串宽字符+一串多字节+一串宽字符，怎么分割？ 以00，作为特征，或者换行作为特征来区分，只能这样了。[/quote] 感谢回复！对于英文用00作为特征应该没有问题，但里面还会有中文，怎么区分？ [/quote] 宽字元中文和多字节中文中间没有分割？

user: user-0
content: 引用 5 楼 zjq9931 的回复:[quote=引用 4 楼 erave5 的回复:] 可能 是我没有说清楚，我要转化的字符串里面，不是纯的多字节或宽字符，而是多字节和宽字符的混合。 可能是这样的字符串：一串多字节+一串宽字符+一串多字节+一串宽字符，怎么分割？ 以00，作为特征，或者换行作为特征来区分，只能这样了。[/quote] 感谢回复！对于英文用00作为特征应该没有问题，但里面还会有中文，怎么区分？

user: user-2
content: 引用 4 楼 erave5 的回复:可能 是我没有说清楚，我要转化的字符串里面，不是纯的多字节或宽字符，而是多字节和宽字符的混合。 可能是这样的字符串：一串多字节+一串宽字符+一串多字节+一串宽字符，怎么分割？ 以00，作为特征，或者换行作为特征来区分，只能这样了。

user: user-0
content: 可能 是我没有说清楚，我要转化的字符串里面，不是纯的多字节或宽字符，而是多字节和宽字符的混合。 可能是这样的字符串：一串多字节+一串宽字符+一串多字节+一串宽字符，怎么分割？

user: user-3
content: 当年写的代码，当时用来转化XML的UTF8格式的汉子，希望对你有用 string UTF8_To_String(const char* szSrc) { 	if(NULL==szSrc || 0==strlen(szSrc)) 	{ 		return ""; 	}  	int nLen = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)szSrc, -1, NULL, 0); 	unsigned short *wszGBK = new unsigned short[nLen+1]; 	memset(wszGBK, 0, nLen*2+2); 	MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)szSrc, -1, (LPWSTR)wszGBK, nLen);  	nLen = WideCharToMultiByte(CP_ACP, 0, (LPWSTR)wszGBK, -1, NULL, 0, NULL, NULL); 	char* szGBK = new char[nLen+1]; 	memset(szGBK, 0, nLen+1); 	WideCharToMultiByte(CP_ACP, 0, (LPWSTR)wszGBK, -1, szGBK, nLen, NULL, NULL);  	string strTemp(szGBK); 	delete []wszGBK;  	wszGBK = NULL; 	delete []szGBK;   	szGBK = NULL;  	return strTemp; }  string String_To_UTF8(const string& strSrc) { 	if (strSrc.empty()) 	{ 		return ""; 	}  	int nLen=MultiByteToWideChar(CP_ACP, 0, strSrc.c_str(), -1, NULL,0); 	WCHAR* pwBuf = new WCHAR[nLen+1]; 	memset(pwBuf, 0, nLen * 2 + 2); 	MultiByteToWideChar(CP_ACP, 0, strSrc.c_str(), strSrc.length(), pwBuf, nLen);  	nLen = WideCharToMultiByte(CP_UTF8, 0, pwBuf, -1, NULL, 0, NULL, NULL); 	char *pBuf=new char[nLen + 1]; 	memset(pBuf, 0, nLen + 1); 	WideCharToMultiByte (CP_UTF8, 0, pwBuf, -1, pBuf, nLen, NULL,NULL);  	string strTemp(pBuf); 	delete[] pBuf; 	pBuf = NULL; 	delete[] pwBuf; 	pwBuf = NULL; 	return strTemp; }

user: user-4
content: ++  引用 1 楼 wangdahu888 的回复:不是有两个API嘛 MultiByteToWideChar[多字节字符串转宽字符] WideCharToMultiByte[宽字符转多字节字符串]

user: user-5
content: 不是有两个API嘛 MultiByteToWideChar[多字节字符串转宽字符] WideCharToMultiByte[宽字符转多字节字符串]