gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:30:44 25 4
gpt4 key购买 nike

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

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

搜索了谷歌并使用了一些技术,但他们无法指定确切的内容。内容失真。

最佳答案

假设您的示例中的输入字符串 (おはよう) 是 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);

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

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

注意(旧):

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

注意(新):

由于 codecvt header 在 C++17 中已弃用,因此有人担心此答案中提出的解决方案。然而,C++ 标准委员会在 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0618r0.html 中添加了一个重要声明。说

this library component should be retired to Annex D, along side , until a suitable replacement is standardized.

所以在可预见的 future ,这个答案中的 codecvt 解决方案是安全且可移植的。

关于C++ 将字符串(或 char*)转换为 wstring(或 wchar_t*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2573834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com