C++ 将字符串(或 char*)转换为 wstring(或 wchar_t*)

2023-12-15

string s = "おはよう";
wstring ws = FUNCTION(s, ws);

我如何将 s 的内容分配给 ws ?

搜索谷歌并使用了一些技术,但他们无法分配确切的内容。内容被扭曲。


NOTE! See 注意事项 (2023-10-05)在底部!

假设示例中的输入字符串 (おはよう) 是 UTF-8 编码的(从外观来看,它不是,但为了解释起见,我们假设它是:-))Unicode 字符串的表示形式如果您感兴趣,那么您的问题可以仅使用标准库(C++11 及更高版本)来完全解决。

TL;DR 版本:

#include <locale>
#include <codecvt>
#include <string>

std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::string narrow = converter.to_bytes(wide_utf16_source_string);
std::wstring wide = converter.from_bytes(narrow_utf8_source_string);

更长的在线编译和运行示例:

(它们都显示相同的示例。只是有很多冗余......)

  • http://ideone.com/KA1oty
  • http://ide.geeksforgeeks.org/5pRLSh
  • http://rextester.com/DIJZK52174

注意(旧):

正如评论中指出并解释的那样https://stackoverflow.com/a/17106065/6345在某些情况下,使用标准库在 UTF-8 和 UTF-16 之间进行转换可能会在不同平台上产生意外的结果差异。为了获得更好的转换,请考虑std::codecvt_utf8如上所述http://en.cppreference.com/w/cpp/locale/codecvt_utf8

注意事项(新):

自从codecvtheader 在 C++17 中已弃用,有人对此答案中提出的解决方案表示担忧。然而,C++标准委员会在其中添加了一个重要声明http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0618r0.html saying

该库组件应与附件 D 一起退役,直到标准化合适的替代品。

所以在可预见的未来,codecvt这个答案中的解决方案是安全且便携的。

注意事项 (2023-10-05):

删除已弃用的提案codecvt and wstring_convert在 C++26 中:

  • 从 C++26 中删除已弃用的 Unicode 转换方面
  • 从 C++26 中删除 wstring_convert
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 将字符串(或 char*)转换为 wstring(或 wchar_t*) 的相关文章

  • 沿着长数据序列在固定大小的移动窗口中查找中值

    给定一个数据序列 可能有重复项 一个固定大小的移动 窗口 从数据开始处每次迭代时移动窗口 序列 使得 1 从窗口中删除最旧的数据元素并添加新数据 元素被推入窗口 2 求每次移动时窗口内数据的中位数 以下帖子没有帮助 有效地找到随机序列的中值
  • C/C++ 程序是在 CPU 上运行还是在内核上运行?

    我已经编程很多年了 但有一件事我一直不明白 有两种类型的编程语言 编译型语言和解释型语言 编译型语言首先需要编译成解释型语言 然后才能执行 例如 C C 需要先编译为机器语言 然后才能执行 我的问题来了 谁真正运行已编译的 C C Wind
  • 如何在Qt中更快地读取数据?

    Qt读取数据库比C 慢吗 我想我错过了一些东西 为了比较阅读速度 我在 Qt 中编写了以下内容 QElapsedTimer t t start int count 0 QString cs Driver SQL Server Server
  • ASP.NET Core 中 AsNoTracking 的模拟或更好的解决方法

    您如何模拟 AsNoTracking 或者是否有更好的解决方法来解决此问题 Example public class MyContext MyContextBase Constructor public MyContext DbContex
  • 使用 CMake 对 SDL 的未定义引用

    我正在使用 SDL v1 2 15 7 和 CMake 3 2 1 开发一个项目 在 h 文件中我添加了 include
  • memccpy 返回比 src 起始地址更低的内存地址

    我有一个学校项目 我必须重新编码memccpy 功能 我使用 2 个程序来检查我的代码是否正常工作 第一个是只有一个主程序的小程序 第二个程序是另一个学生开发的 可以找到here https github com yyang42 mouli
  • 为什么Windsor只能拦截虚方法或接口方法?

    我正在阅读文档 发现如果不使用接口 那么 Windsor 只能拦截虚拟方法 这是 Windsor 的限制还是 C 语言的限制 我正在寻找深入的答案 C 语言在这里完全无关 问题是拦截在运行时级别如何工作 一种技术是从类继承 实现接口并将其用
  • 二维数组的列求和

    我有一个IEnumerable
  • 本地主机和 request.Url.Authority

    我的应用程序通过 URL 中的公司标识符分隔用户 company1 app com company2 app com 我正在本地 PC 上进行测试 请求如下 company1 localhost com 但是 我的 request Url
  • 在 OpenGL 中使用不同的着色器程序?

    我必须在 OpenGL 中针对不同的对象使用两个不同的着色器程序 我发现我必须使用glUseProgram 在不同的着色器程序之间切换 但对此没有太多信息 鉴于我有两个用于不同对象的不同着色器程序 如何为每个着色器程序生成和绑定 VAO 和
  • DataContractJsonSerializer 包含元素类型子类型的通用列表

    我要使用DataContractJsonSerializer用于 JSON 序列化 反序列化 我在 JSON 数组中有两种对象类型 并希望将它们都反序列化为相应的对象类型 具有以下类定义 DataContract public class
  • 如何将对 System.Data.DataSetExtensions 的引用添加到网站 ascx.cs 文件?

    我们正在处理一个网站项目并尝试参考System Data DataSetExtensions 使用 Web 应用程序会更好 不过 技术主管有她的理由 这是我们尝试过的 找到装配路径 打开 Visual Studio 命令提示符并运行sn e
  • 为什么我从 c# 到 js 得到不同的 MD5 哈希值?

    我有一个用于加密密码的 C 函数 System Security Cryptography MD5CryptoServiceProvider md5Provider new System Security Cryptography MD5C
  • 验证域用户凭据

    我需要一种方法来验证 Windows 上本机 C 的用户 密码对 输入的是用户名和密码 用户可以是 DOMAIN user 格式 基本上我需要编写一个函数 如果用户 密码是有效的本地帐户 则返回 true 第1部分 如果用户 密码在给定的域
  • C++ 项目编译为静态库,编译为动态库失败(链接器错误)。为什么?

    我有一个 VS2008 本机 C 项目 我希望将其编译为 DLL 它仅引用一个外部库 log4cplus lib 并使用其功能 当然也使用 log4cplus 的 h 文件 当我尝试将我的项目编译为静态库时 它成功了 当我尝试作为 DLL
  • 为什么 char 数组需要 strcpy 而 char star 不需要 - 在 C 中使用结构

    我对这段代码有一个误解 typedef struct EXP int x char name char lastName 40 XMP main XMP a a name eaaa a lastName strcpy a lastName
  • 使用 QTestLib 时抑制 qDebug

    我正在向 Qt 中的项目添加单元测试 并希望使用 QTestLib 我已经设置了测试并且它们运行良好 问题是在项目中我们重写了 qDebug 以输出到我们自己的日志文件 这在运行应用程序时效果很好 问题是当我测试类时 它有时会开始记录 然后
  • WPF DataGrid 选定项

    我有一个 DataGrid 用户可以通过在最后一行输入数据来添加项目 我还有一个按钮可以删除当前选定的项目 但是 当选择最后一行 空 用于添加新项目 时 最后选定的项目将保留在 SelectedItem 中 因此 如果我打开窗口 选择最后一
  • 如何在您的网站中连接两个人

    有一款名为 Verbosity 的游戏 这是一款有目的的游戏 位于此链接上www gwap com 在游戏中 他们随机连接两个玩家互相玩 游戏是玩家1应该向他的搭档 玩家2 描述一个单词 而玩家2应该猜测这个单词 我正在尝试建立一个网站来执
  • C# 中的快速字符串解析

    在 C 中解析字符串最快的方法是什么 目前我只是使用字符串索引 string index 并且代码运行合理 但我忍不住认为索引访问器所做的连续范围检查必须添加一些东西 所以 我想知道我应该考虑哪些技术来增强它 这些是我最初的想法 问题 使用

随机推荐

  • 获取Android设备/模拟器根目录

    我正在使用 Eclipse Ubuntu 开发 Android 应用程序 像往常一样 我在 AVD 模拟器上进行第一次拍摄 我想建立一个独特的文件夹结构 可以在当前模拟器和最终物理设备 SD 存储卡 上使用 对于虚拟和物理设备类型 通过程序
  • Android Wear OS 表盘 支持不同屏幕尺寸

    我正在玩 Wear OS 的表盘 目前 我已经创建了 背景 320x320 刻度圈 320x320 时针 分针和秒针 320x40 在屏幕尺寸为 320x320 的圆形设备上一切正常 当我使用屏幕尺寸为 360x360 的设备时 事情变得复
  • 根据数据属性的值选择选项

    我想选择 又名 jQuery 预选择 并根据数据变量设置值 该列表有 3 个具有相同值但不同 data d 的项目 假设我有变量selectvar d 那么它应该更改为列表中的 2 项
  • 如何在 Symfony2 路由中定义默认日期值?

    如果我想创建一条路线 其中年月日是变量 如何定义如果这些变量为空 则采用当前日期 例如 像这样 肯定行不通 blog path blog year month day defaults controller AcmeBlogBundle B
  • 我已经安装了 Visual Studio 2015,但没有 C++ 项目。?

    我遇到问题 我想在 Visual Studio 2015 中编写 C 代码 但无法创建 C 项目 因为 新建项目 窗口中没有 C 模板 我正在以这种方式创建新项目文件 gt 新建 gt 项目 gt Visual C 但没有c 模板 请帮忙
  • 当我按下屏幕 ionic 3 时菜单不起作用

    我有一个屏幕登录 主页带有菜单 4 个选项卡 喜欢home about location more 在这种情况下菜单工作正常 当我登录时 我使用下面的代码将屏幕导航到带有所有选项卡 菜单的主页 那个时候工作正常 this navCtrl p
  • 使用 App SDK 2.0 中的新数据更新图表

    我正在使用图表来可视化数据TimeboxScopedApp 我想在范围发生变化时更新数据 使用更暴力的方法remove 然后按照描述重新绘制图表here给我留下了一个覆盖的 正在加载 蒙版 但其他方面都有效 使用 Highchart 原生的
  • mysql存储过程可以有默认参数吗?

    我用谷歌搜索了这个并不断提出 不 这是不可能的 但这些帖子的日期是 2005 2007 年 所以我想知道这是否已经改变 代码示例 CREATE PROCEDURE blah myDefaultParam int 0 This breaks
  • 如何获取特定应用程序的电池和移动数据使用情况?

    背景 从某些 Android 版本 不记得是哪个 开始 Android 能够显示已安装应用程序的电池统计信息和移动数据使用情况 3G 以便用户意识到这一点并将能够思考应用程序是否应该保留 我正在谈论那些 问题 我在 Play 商店上看到过一
  • 导航视图全局操作返回状态

    我一直在搞乱 Jetpack 导航组件 并且创建了一个使用导航抽屉的活动 class MainActivity AppCompatActivity override fun onCreate savedInstanceState Bundl
  • 为什么CPU推测执行不会导致OOB程序崩溃?

    问题源于阅读幽灵攻击纸 如果我理解正确的话 攻击源于 CPU 启发式推测执行 错误 代码分支的可能性 考虑这个例子 C语言 int arr 42 if i lt 42 int j arr i 如果我正确理解这篇论文 int j arr i
  • 可以在 fpdf 中嵌入 fontawesome 字体吗?

    我想在 pdf 中使用 fontawesome 我使用 php 库 fpdf 和字体嵌入生成 pdf 但是我无法让它发挥作用 我使用这个工具生成afm文件 http fpdf fruit lab de 但是当我尝试使用 fontawesom
  • Typescript - 如何创建三状态切换按钮,单击时会更改颜色和文本

    我正在使用打字稿编码来开发一个可以改变三种状态的按钮 即 单击时循环更改颜色和文本 我在下面附上了互动 有人可以帮忙编写下面的交互代码吗 D 点击查看互动gif 您可以创建不同状态 标签和样式 的数组 并在单击按钮时循环遍历它 当到达数组的
  • Java 中的查找表?

    在我的计算机科学课程中 我们正在学习查找表 但我们的老师没有在他发布的课程页面中提供任何示例 也没有在他提供的视频中提供任何示例 他所做的只是告诉我们那是什么 但他希望我们在下一次作业中使用它们 但他未能给我们提供如何做到这一点的例子 在学
  • 字符串“”在 IE 中导致错误

    如果我将这段 html 添加到我的页面中 IE 7 0 显示语法错误 左下角有感叹号 未终止的字符串常量 如果我只更改一个字母 任何一个 错误就会消失 看起来 IE 不喜欢这个特定的单词 包括括号 有什么想法吗 谢谢你 安德烈 这对我有用
  • flutter iOS 构建失败(ld:找不到 -lPods-Runner 的库)

    我是颤振的新手 我创建了小型 flutter 应用程序 我想在我的真实设备上测试它 但我无法生成 ios ipa 文件进行测试 如果有人可以帮助我解决这个问题 那么这对我有好处 提前致谢 我收到这个错误 iMac test app sneh
  • GAE 不支持 java.awt.*?如何解决这个问题?

    BufferedImage 图像 new BufferedImage 宽度 高度 BufferedImage TYPE INT RGB 在应用程序引擎中 我发现它不起作用 它说GAE不支持java awt image bufferedIma
  • r markdown biblio-style 不起作用

    我在改变论文中参考书目的引用风格时遇到了一些麻烦 根据r 降价指定围兜样式 我需要acm from latex 我只需要执行以下操作 title title bibliography biblioteka bib biblio style
  • 是个 。在 .Cells 定义时是否需要在 .Range 中?

    人们普遍认为这不是 最佳实践 dim rng as range with thisworkbook lt possibly set an external workbook with worksheets sheet1 set rng ra
  • C++ 将字符串(或 char*)转换为 wstring(或 wchar_t*)

    string s wstring ws FUNCTION s ws 我如何将 s 的内容分配给 ws 搜索谷歌并使用了一些技术 但他们无法分配确切的内容 内容被扭曲 NOTE See 注意事项 2023 10 05 在底部 假设示例中的输入