zoukankan      html  css  js  c++  java
  • utf8、ansii、unicode编码之间的转换

    #include "stdafx.h"
    #include "windows.h"
    #include <iostream>
    #include <string>
    #include <memory>

    using namespace std;

    wstring AnsiiToUnicode(const string& str) {
    // 参数的长度
    int strLen = str.length();
    // 预算-缓冲区中宽字节的长度
    int unicodeLen = MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, nullptr, 0);
    // 给指向缓冲区的指针变量分配内存
    allocator<wchar_t> wc_t;
    wchar_t *pUnicode = wc_t.allocate(sizeof(wchar_t)*(unicodeLen+1),0);
    // 开始向缓冲区转换字节
    MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, pUnicode, unicodeLen);
    wstring ret_str = pUnicode;
    delete pUnicode;
    return ret_str;
    }
    string UnicodeToAssii(const wstring& wstr) {
    // 参数的长度
    int wstrLen = wstr.length();
    // 预算-缓冲区中多字节的长度
    int ansiiLen = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, nullptr, 0,nullptr,nullptr);
    // 给指向缓冲区的指针变量分配内存
    allocator<char> c_t;
    char *pAssii = c_t.allocate(sizeof(char)*(ansiiLen + 1), 0);
    // 开始向缓冲区转换字节
    WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, pAssii, ansiiLen,nullptr,nullptr);
    string ret_str = pAssii;
    delete pAssii;
    return ret_str;
    }
    wstring Utf8ToUnicode(const string& str) {
    // 参数的长度
    int strLen = str.length();
    // 预算-缓冲区中宽字节的长度
    int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, nullptr, 0);
    // 给指向缓冲区的指针变量分配内存
    allocator<wchar_t> wc_t;
    wchar_t *pUnicode = wc_t.allocate(sizeof(wchar_t)*(unicodeLen + 1), 0);
    // 开始向缓冲区转换字节
    MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, pUnicode, unicodeLen);
    wstring ret_str = pUnicode;
    delete pUnicode;
    return ret_str;
    }
    string UnicodeToUtf8(const wstring& wstr) {
    // 参数的长度
    int wstrLen = wstr.length();
    // 预算-缓冲区中多字节的长度
    int ansiiLen = WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, nullptr, 0, nullptr, nullptr);
    // 给指向缓冲区的指针变量分配内存
    allocator<char> c_t;
    char *pAssii = c_t.allocate(sizeof(char)*(ansiiLen + 1), 0);
    // 开始向缓冲区转换字节
    WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, pAssii, ansiiLen, nullptr, nullptr);
    string ret_str = pAssii;
    delete pAssii;
    return ret_str;
    }
    string AnsiiToUtf8(const string& str) {
    return UnicodeToUtf8(AnsiiToUnicode(str));
    }
    string Utf8ToAnsii(const string& str) {
    return UnicodeToAssii(Utf8ToUnicode(str));
    }

  • 相关阅读:
    devexpress LayoutControl控件里面的内边距的消除
    NPOI 单元格高度和宽度的值设置解释
    NPOI 设置合并后的单元格的边框的解决方法
    ajax中参数traditional的作用
    kendo ui 遇到问题 Invalid or unexpected token的原因和解决方法
    kendo ui grid重置功能,重置所有数据
    mysql 8.*版本部署上以后用navcat能连上,但是系统连不上
    mysql 5.7的my.ini的位置在隐藏文件夹“ProgramData”下面
    获取kendo treeView上的选中项
    mysql按30分钟进行分组
  • 原文地址:https://www.cnblogs.com/HemJohn/p/7494323.html
Copyright © 2011-2022 走看看