windows 下UNICODE 多字节和utf-8相互转化

很多时候我们需要UNICODE,utf-8和ascii相互转化,windows提供了相关api但是不是特别好用,很多时候还会出错,封装一份自己的字符转化函数,使用的时候就不用那么麻烦了,需要的时候,直接调用就好。

#pragma once
class CConvertChar
{
public:
    CConvertChar() = default;
    ~CConvertChar();

public:
    static int UnicodeToAnsi(LPSTR szAnsi,LPCWSTR wstrUnicode);
    static int AnsiToUnicode(LPWSTR wstrUnicode, LPCSTR szAnsi);
    static int UTF8ToUnicode(LPWSTR wstrUnicoe, LPCSTR szUTF8);
    static int UnicodeToUTF8(LPSTR szUTF8, LPCWSTR wszUnicode);
};
CConvertChar::~CConvertChar()
{
}


int CConvertChar::UnicodeToAnsi(LPSTR szAnsi, LPCWSTR wstrUnicode)
{
    DWORD dwMinSize = 0;
    //转化后需要多少多字节来存储
    dwMinSize = WideCharToMultiByte(CP_OEMCP, 0, wstrUnicode, -1, NULL, 0, NULL, FALSE);
    if (0 == dwMinSize)
    {
        return 0;
    }

    WideCharToMultiByte(CP_OEMCP, 0,wstrUnicode, -1, szAnsi, dwMinSize, NULL, FALSE);

    return dwMinSize;
}
int CConvertChar::AnsiToUnicode(LPWSTR wstrUnicode, LPCSTR szAnsi)
{
    DWORD dwMinSize = 0;
    dwMinSize = MultiByteToWideChar(CP_ACP, 0, szAnsi, -1, NULL, 0);
    if (0 == dwMinSize)
    {
        return 0;
    }
    MultiByteToWideChar(CP_ACP, 0,szAnsi, -1,wstrUnicode, dwMinSize);

    return dwMinSize;
}

int CConvertChar::UTF8ToUnicode(LPWSTR wstrUnicoe, LPCSTR szUTF8)
{
    //转换后Unicode的长度  

    DWORD dwMinSize = MultiByteToWideChar(CP_UTF8, 0, szUTF8, -1, NULL, 0);

    if (0 != dwMinSize)
    {
        //转为Unicode  
        dwMinSize = MultiByteToWideChar(CP_UTF8, 0, szUTF8, -1, wstrUnicoe, dwMinSize);

        return dwMinSize;
    }

    return 0;
}

int CConvertChar::UnicodeToUTF8(LPSTR szUTF8, LPCWSTR wszUnicode)
{
    int dwMinSize = WideCharToMultiByte(CP_UTF8, 0, wszUnicode, -1, NULL, 0, NULL, NULL);
    if (dwMinSize)
    {
        dwMinSize = WideCharToMultiByte(CP_UTF8, 0, wszUnicode, -1, szUTF8,dwMinSize,NULL,NULL);
    }

    return dwMinSize;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值