Windows编程下的字符串格式及编码问题

这篇博客探讨了在Windows编程中遇到的字符串格式和编码问题,包括使用MultiByteToWideChar函数、T2W转换宏、A2CW转换等方法进行char*到LPCWSTR的转换,并讨论了ANSI、UTF-8、UNICODE之间的转换以及utf-8与GBK的转换,旨在解决Windows环境下中文乱码的困扰。
摘要由CSDN通过智能技术生成

大家在学习或者使用Windows编程中,经常会碰到字符串之间的转换,char*转LPCWSTR也是其中一个比较常见的转换。下面就列出几种比较常用的转换方法。大家可以根据自己的需求选择相对应的方法,下面来一起学习学习吧。

为什么总结这个问题

一些代码在其他平台下是正常的,但是在Windows环境下,经常遇到中文乱码的情况,很是头疼!

1、通过MultiByteToWideChar函数转换

MultiByteToWideChar函数是将多字节转换为宽字节的一个API函数,它的原型如下:

int MultiByteToWideChar( 
 UINT CodePage,   // code page 
 DWORD dwFlags,   // character-type options 
 LPCSTR lpMultiByteStr, // string to map 
 int cbMultiByte,  // number of bytes in string 
 LPWSTR lpWideCharStr, // wide-character buffer 
 int cchWideChar  // size of buffer 
);

LPCWSTR实际上也是CONST WCHAR *类型

 char* szStr = "测试字符串"; 
WCHAR wszClassName[256]; 
memset(wszClassName,0,sizeof(wszClassName)); 
MultiByteToWideChar(CP_ACP,0,szStr,strlen(szStr)+1,wszClassName, 
 sizeof(wszClassName)/sizeof(wszClassName[0]));

2、通过T2W转换宏

  char* szStr = "测试字符串";  
CString str = CString(szStr); 
USES_CONVERSION; 
LPCWSTR wszClassName = new WCHAR[str.GetLength()+1]; 
wcscpy((LPTSTR)wszClassName,T2W((LPTSTR)str.GetBuffer(NULL))); 
str.ReleaseBuffer();

3、通过A2CW转换

char* szStr = "测试字符串";  
CString str = CString(szStr); 
USES_CONVERSION; 
LPCWSTR wszClassName = A2CW(W2A(str)); 
str.ReleaseBuffer();

上述方法都是UniCode环境下测试的。

4.编码格式转换:ANSI,UTF-8,UNICODE字符在Windows下的转换

//convert_code.hpp
//调用后不要忘记delete[]掉

#pragma once
#include <windows.h>

static const wchar_t* ConvertUtf8ToUnicode(const char* _ansiUtf8)
{
   
	if (_ansiUtf8 == NULL)
	{
   
		return L"";
	}
	int len = MultiByteToWideChar(CP_UTF8, 0, _ansiUtf8, -1, NULL, 0);
	wchar_t* wszUnicode = new wchar_t[(size_t)len + 1];
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值