首页 > 编程语言 >C/C++ 调用标准库函数实现 std::string to std::wstring 相互字符集变换(转)

C/C++ 调用标准库函数实现 std::string to std::wstring 相互字符集变换(转)

时间:2023-01-01 17:33:41浏览次数:64  
标签:std return string len wstring buf 库函数


转自:https://blog.csdn.net/liulilittle/article/details/127697458


#include <locale>
#include <codecvt>
#include <string>
#include <vector>
 
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
 
std::wstring utf8_to_wstring(const std::string& s) {
    std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
    return converter.from_bytes(s);
}
 
std::string wstring_to_utf8(const std::wstring& s) {
    std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
    return converter.to_bytes(s);
}
 
std::wstring ascii_to_wstring(const std::string& s)
{
    std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
    return converter.from_bytes(s);
}
 
std::wstring ascii_to_wstring2(const std::string& s)
{
    std::size_t len = mbstowcs(NULL, s.data(), 0);
    if (len == 0 || len == std::string::npos)
    {
        return std::wstring();
    }
 
    std::vector<wchar_t> buf(len + 1);
    return std::wstring(buf.data(), mbstowcs(&buf[0], s.data(), buf.size()));
}
 
std::string wstring_to_ascii(const std::wstring& s)
{
    std::size_t len = wcstombs(NULL, s.data(), 0);
    if (len == 0 || len == std::string::npos)
    {
        return std::string();
    }
 
    std::vector<char> buf(len + 1);
    return std::string(buf.data(), wcstombs(&buf[0], s.data(), buf.size()));
}
 
int main(int argc, const char* argv[])
{
    setlocale(LC_ALL, "chs");
    _wsetlocale(LC_ALL, L"chs");
 
    wprintf(L"%s\n", ascii_to_wstring(wstring_to_ascii(L"中国")).data());
    return getchar();
}


----------

标签:std,return,string,len,wstring,buf,库函数
From: https://www.cnblogs.com/gispathfinder/p/17018316.html

相关文章

  • JAVA零基础小白免费学习教程之Object类和String类
    day10-JAVAOOP课程目标1.【理解】什么是API2.【掌握】API的使用方式3.【理解】Object类4.【掌握】Object类中的equals方法5.【掌握】String类中的常用方法API......
  • JAVA零基础小白学习教程之StringBuilder类和包装类.Arrays类.Math类
    day11-JAVAOOP课程目标1.【理解】StringBuilder类2.【掌握*】StringBuilder的使用3.【理解】Math类的使用4.【理解】Arrays类的使用5.【掌握*】包装类的使用6.......
  • Java.toString() ,(String),String.valueOf()的区别
    先说他们三的作用是什么吧:没什么特别的作用,就是让我们得到的对象或参数类型,按照要求转成字符串的形式。String:毫无疑问,这种就是强转形式,简单方便,效率高。java程序员可能看到......
  • Java-常用API(String、ArrayList) 7-笔记
    什么是api?全称应用程序编程接口,就是Java自己写好的程序,给程序员调用的,方便完成一些功能的。API文档程序使用说明书String是什么?String是字符串类型,它定义的变量可以指向一......
  • 第九章《字符串》第4节:StringBuffer和StringBuilder
    ​前面几个小节主要讲解了String类的特点以及使用方法。实际上,Java语言中并不只有String类能表示字符串,StringBuffer和StringBuilder也可以表示字符串,它们共同构成了字符串......
  • 第九章《字符串》第3节:String类对象的存储方式
    ​大多数情况下,程序员都会用String类对象表示一个字符串。虚拟机在存储String类对象时会创建一个常量池,把符合条件的对象都存储到常量池中。所谓常量池是指一块用于保存对象......
  • 第九章《字符串》第1节:String类的几个基本常识
    ​一串连续的字符被称为字符串。为了与程序中的变量名相区别,字符串的两端都会加上双引号,所以在程序中如果出现了“abc”,那么它就代表一个字符串而不是一个变量的名称。被双......
  • cf-1767C-Count Binary Strings(区间dp)
    题面https://codeforces.com/problemset/problem/1767/C下面展示带注释的ac代码在代码里解释思路Ac代码#include<bits/stdc++.h>#defineioios::sync_with_stdio(f......
  • 流的使用之“如何将List<String>转为Map”
    流的使用之“如何将List<String>转为Map” ProductIllegalCustomquery=newProductIllegalCustom();query.setUnionSkus(unionSkus);Map<String,......
  • STL容器综合(string除外)
    ①vector容器:类似于数组,但是他是单端数组与数组的区别:数组是静态空间,vector是动态可扩展的动态扩展:找一个更大的新内存空间,把原空间的的数据拷贝一份放到新空间,然后释放......