你应该这样做:

inline std::wstring convert(const std::string& as)

{

// deal with trivial case of empty string

if(as.empty()) return std::wstring();

// determine required length of new string

size_t reqLength = ::MultiByteToWideChar(CP_UTF8, 0, as.c_str(), (int)as.length(), 0, 0);

// construct new string of required length

std::wstring ret(reqLength, L'\0');

// convert old string to new string

::MultiByteToWideChar(CP_UTF8, 0, as.c_str(), (int)as.length(), &ret[0], (int)ret.length());

// return new string (compiler should optimize this away)

return ret;

}

这预计的std :: string是UTF- 8(CP_UTF8),当你有另一种编码替换代码页。

另一种方式可以是:

inline std::wstring convert(const std::string& as)

{

wchar_t* buf = new wchar_t[as.size() * 2 + 2];

swprintf(buf, L"%S", as.c_str());

std::wstring rval = buf;

delete[] buf;

return rval;

}

c语言窄字符转换为宽字符,将窄字符串转换为宽字符串相关推荐

  1. C语言学习(十二)C语言中的字符(宽字符与窄字符)、从字符谈谈C语言的编码、转义字符

    C语言学习(十二)C语言中的字符(宽字符与窄字符).从字符谈谈C语言的编码.转义字符 目录 C语言学习(十二)C语言中的字符(宽字符与窄字符).从字符谈谈C语言的编码.转义字符 英文字符 字符的表示 ...

  2. C++ 宽字符 窄字符 char wchar

    目录 wchar_t和char区别 宽字符 string和wstring的区别 wchar_t和char区别 参考链接 宽窄字符是与一个字符所占的字节数有关,如果一个字符只占一个字节,那么它就是窄字符 ...

  3. 宽字符wchar_t和窄字符char区别和相互转换

    转自:http://blog.csdn.net/nodeathphoenix/article/details/7416725 1.    首先,说下窄字符char了,大家都很清楚,就是8bit表示的b ...

  4. mbstowcs 和 wcstombs函数:C语言提供的宽字符和多字节字符转换函数

    C语言中的多字节字符与宽字符 字符型char只占八位,存储ascii码的,而宽字符型是为了存储多国语言的代码unicode,包括中文,法语德语什么的,8位256种不够用了 C语言原本是在英文环境中设计 ...

  5. C++ 宽字符(wchar_t)与窄字符(char)的转换

    了解 长度 宽字符wchar_t的长度16位,可以用来显示中文等除英文外的其他文字, 窄字符    char   的长度  8 位,只能处理英文. 哪里可以见到 在VS2010, 2012, 2013 ...

  6. linux 宽字符串,C语言中的多字节字符与宽字符

    C语言原本是在英文环境中设计的,主要的字符集是7位的ASCII码,8位的byte(字节)是最常见的字符编码单位.但是国际化软件必须能够表示不同的字符,而这些字符数量庞大,无法使用一个字节编码. C95 ...

  7. C语言中的多字节字符与宽字符

    C语言原本是在英文环境中设计的,主要的字符集是7位的ASCII码,8位的byte(字节)是最常见的字符编码单位.但是国际化软件必须能够表示不同的字符,而这些字符数量庞大,无法使用一个字节编码. C95 ...

  8. C语言中宽字符和多字节字符

    C 语言原本是在英文环境中设计的,主要的字符集是7 位的ASCII 码.从此开始,8 位的byte(字节)变成最常见的字符编码单位,但是国际化软件必须能够表示不同的字符,而这些字符数量庞大,无法使用一 ...

  9. volatile,可变参数,memset,内联函数,宽字符窄字符,国际化,条件编译,预处理命令,define中##和#的区别,文件缓冲,位域

     1.volatile:要求参数修改每次都从内存中的读取.这种情况要比普通运行的变量需要的时间长. #include <stdio.h> #include <stdlib.h&g ...

  10. Windows核心思想-宽字符与窄字符(Unicode和ASCII)

    目录 基本概念 演示 基本概念 宽字符:Unicode字符,双字节 窄字符:ASCII字符,单字节 Windows中所有的底层函数都是Unicode编码 COM组件必须使用Unicode编码(COM组 ...

最新文章

  1. qt mysql怎么选表_Qt的Mysql数据库表操作(1)
  2. 方法区中的无用类回收
  3. Android插件框架VirtualAPK
  4. c# out关键字 vb_c# 关键字:ref 和 out
  5. extjs Grid(一)
  6. 【MySQL】MySQL SQL查询语法建议
  7. android datepicker控件,android中控件DatePicker控件-Fun言
  8. 蓝桥杯 ADV-205 算法提高 拿糖果 java版
  9. 【懒人有道】在asp.net core中实现程序集注入
  10. html 360登录自动填写,汇总:如何在360浏览器中删除自动填写的表单?
  11. oracle 定义变量 查询,Oracle定义PL/SQL变量
  12. 拆装智伴机器人_智伴机器人软件下载-智伴下载 v4.2.8-pc6智能硬件网
  13. idea破解失败无法打开
  14. 由三个点坐标判断三个点能否组成三角形模板(自用,客官可取)
  15. 洛谷 P2014 选课
  16. C++在WINdow桌面绘制文字图形
  17. sklearn提示cannot import name ‘MaskedArray‘ from ‘sklearn.utils.fixes‘的解决方法
  18. Mybatis基本查询准备
  19. Mac OS 禁止屏幕休眠的方法
  20. 防止SQL注入攻击-学习笔记

热门文章

  1. 往年二本计算机分数线,全国一本、二本院校历年录取分数线汇总
  2. 黑马程序员_Java_多线程
  3. Windows 无法连接打印机,请检查打印机名并重试。如果这是网络打印机,请确保打印机已打开,并且打印机地址正确。报错代码:0x00000709
  4. Bootstrap项目之微金所
  5. 国嵌Linux视频驱动开发
  6. Alibaba Java 2021 技术图谱——学习永无止境
  7. biti_rainy's blog
  8. 求生之路2联机服务器没有响应,求生之路2进不了服务器
  9. react-ant design mobile - webpack 自定义主题
  10. newman的基本使用