wstring 相关问题

C ++标准库类,用于保存宽字符的字符串。 Windows与Linux的行为不同。

wchar_t*的字符数有限制吗

我有一个函数可以在 wchar_t* 中创建 const char* 的副本 wchar_t* to_wchar(const char* 行) { size_t line_length = strlen(line) + 1; wchar_t* wchar_name_temp = 新 wchar_t[line_len...

回答 1 投票 0

cpp中的mbstowcs_s有什么问题

Windows 的 mbstowcs_s 函数到底有什么问题? 在阅读微软网站上的文档时,我可以清楚地看到这个函数只需要 4 个参数。另外,当我去参加活动时...

回答 1 投票 0

如何将 unicode 数字转换为 std::wstring?

有没有一种简单的方法可以将 Unicode 数字转换为 std::wstring? 例如我想将 U+1E9E (=16785054) 转换为 ẞ。

回答 1 投票 0

std::format for std::wstring GCC 的自定义格式化程序

我正在尝试为 std::format 制作一个格式化程序,它将采用 std::wstring 并将其格式化为 std::string 。我的想法是用“?”替换所有不可转换的字符。 #包括 我正在尝试为 std::format 制作一个格式化程序,它将需要 std::wstring 并将其格式化为 std::string。我的想法是用“?”替换所有不可转换的字符。 #include <format> #include <string> #include <iostream> template<> struct std::formatter<std::wstring> : public std::formatter<std::string> { template<typename ParsContext> constexpr auto parse(ParsContext& ctx) { return std::begin(ctx); } template<typename FormatContext> auto format(const std::wstring &obj, FormatContext &ctx) const { std::string result{}; for(const auto & wch : obj){ if(wch < 0x80){ std::format_to(std::back_inserter(result), "{}", static_cast<char>(wch)); }else{ std::format_to(std::back_inserter(result), "?"); } } return std::formatter<std::string>::format(result, ctx); } }; int main(){ std::wstring test{L"Hello wide world.こんにちは、안녕하세요!\n"}; std::cout << std::format("{}", test); } 导致以下编译器错误:(小样本,编译器资源管理器中出现完整错误) /opt/compiler-explorer/gcc-13.2.0/include/c++/13.2.0/format:3029:19:错误:没有匹配的函数用于调用“std::basic_string_view::basic_string_view()” 3029 | 3029 _M_set(_Td{__v.data(), __v.size()}); /opt/compiler-explorer/gcc-13.2.0/include/c++/13.2.0/string_view:146:7: 注意:候选者:'constexpr std::basic_string_view<_CharT, _Traits>::basic_string_view(const _CharT*, size_type) [with _CharT = 字符; _Traits = std::char_traits; size_type = 长无符号整数]' 146 | 146 basic_string_view(const _CharT* __str, size_type __len) noexcept | ^~~~~~~~~~~~~~~~~ /opt/compiler-explorer/gcc-13.2.0/include/c++/13.2.0/string_view:146:39:注意:参数 1 没有从“wchar_t*”到“const char*”的已知转换 146 | 146 basic_string_view(const _CharT* __str, size_type __len) noexcept 将 libc++ 与 clang 结合使用,它可以工作 将 Clang 与 libc++ 结合使用 如有任何帮助,我们将不胜感激。 GCC/Clang libstd++ 失败 这是一个 libstdc++ 的错误(PR 112607),已在 GCC-trunk 中修复。

回答 1 投票 0

getline() 读取 UTF-8 表情符号字符时到达文件末尾

我正在编写一个处理大型分隔文件的 C++ 程序。 我有一个 UTF-8 csv 文件,其中包含一行带有(表情符号?)字符 🌟 的行。它看起来像这样: 123、“詹姆斯”,“

回答 1 投票 0

访问 wstring 中的单个字符 (wchar_t)

我正在从包含 unicode 字符的文件中读取文本,并将文本存储到 wstring 中。我有兴趣迭代 wstring 以确定哪些字符需要多个......

回答 1 投票 0

[C++]:访问 wstring 中的单个字符 (wchar_t)

我正在从包含 unicode 字符的文件中读取文本,并将文本存储到 wstring 中。我有兴趣迭代 wstring 以确定哪些字符需要多个......

回答 1 投票 0

C++ 如何获取 int 值的 std::wstring? [重复]

我有一个int val = 0x1234;并想要获取该数字的 std::wstring (ሴ) 整数值=0x1234; std::wstring wstr = to_wstring(val) (这给了我 L"4660" 这不是我想要的!) 是...

回答 1 投票 0

奇怪的行为(带有 swscanf 的未命名命名空间)

我有下一个实验代码。该代码因标记行上的分段错误而失败。 如果我从匿名名称空间中取出 str2MxfKey 函数或为名称空间指定一些名称,代码...

回答 1 投票 0

为什么 std::getline() 似乎会弄乱重音字符?

我正在尝试在我的 C++20 程序中使用和显示法语重音字符。 然而,使用 std::getline() 读取文件内部似乎会弄乱重音字符,如下所示: #包括 我正在尝试在我的 C++20 程序中使用和显示法语重音字符。 但是,使用 std::getline() 读取文件内部似乎会弄乱重音字符,如下所示: #include <locale> #include <iostream> #include <fstream> int main(void) { setlocale(LC_ALL,""); std::wifstream file("test.txt"); std::wstring s; std::getline(file, s); std::wcout << s << std::endl; return 0; } test.txt的内容(以UTF-8编码): Salut ! Comment ça va ? éèêëâàäáôûöüùîï 结果: $>./test Salut ! Comment ça va ? éèêëâà äáôûöüùîï 但是,当我尝试显示与const std::wstring相同的文本时,结果没有问题: #include <locale> #include <iostream> int main(void) { setlocale(LC_ALL,""); std::wstring s = L"Salut ! Comment ça va ? éèêëâàäáôûöüùîï"; std::wcout << s << std::endl; return 0; } 结果: $>./test Salut ! Comment ça va ? éèêëâàäáôûöüùîï 使用 setlocale(LC_ALL, "") 使问题变得更好,就像以前一样,即使第二个例子也不起作用,但 std::getline() 似乎有一个我不明白的问题。 我读到我可能需要将语言环境注入 std::wifstream,但我不明白如何使其工作。 我对 C++ 相当陌生,所以我不确定是否有更好的工具来解决此类问题,至少我找不到。 我在 MinGW 上使用 zsh,集成到 VSCode 中。 我使用以下命令进行编译: c++ -Wall -Wextra -Werror -std=c++20 test.cpp -o test 由于这篇文章我能够解决这个问题! 灌输是解决方案,这就是解决我的问题的方法: #include <locale> #include <codecvt> #include <iostream> #include <fstream> int main(void) { setlocale(LC_ALL,""); std::wifstream file("test.txt"); file.imbue(std::locale(std::locale(), new std::codecvt_utf8<wchar_t,0x10ffff, std::consume_header>)); std::wstring s; std::getline(file, s); std::wcout << s << std::endl; return 0; } 这一行: file.imbue(std::locale(std::locale(), new std::codecvt_utf8<wchar_t,0x10ffff, std::consume_header>)); 原来是: file.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t,0x10ffff, std::consume_header>)); 但是,std::locale::empty()是特定于平台的,如这个SO问题所示,所以我将其替换为std::locale()并且工作正常。

回答 1 投票 0

将 std::u16string 写入文件?

我正在尝试将 std::u16string 写入文件 使用 std::string 可以轻松完成 // ... 伪代码 std::wofstream 输出文件; outfile.open("words.txt", std::ios_base::app); 输出文件 << "som...

回答 2 投票 0

to_wstring().size() 的行为不符合预期

我有一个double变量,它的内容需要转换成字符串。我需要计算该字符串最终会有多长,所以我尝试使用 size(),但这会导致意外的

回答 1 投票 0

如何将 std::wstring 转换为 unsigned long C++ 跨平台?

将 wstring 转换为 unsigned long 是正确的还是有更好的方法? std::wstring in1 = L"ThisIsALongerWord"; std::wstring in2 = L"K"; std::wst...

回答 0 投票 0

我不明白为什么我的 std::string 字符串没有正确包含 UTF-8 字符串

大家!我正在编辑我的问题,以便通过代码向每个人提供有关我的问题的更清晰的信息。我还将我的输入字符串从日语更改为希腊字符串,请注意。那...

回答 1 投票 0

将日语wstring转换为std::string。

谁能给个好方法把日语wstring转换成std::string?我用了下面的代码.日语字符串在英语操作系统中不能正常转换. std::string WstringTostring(std::...

回答 1 投票 0

非ASCII文件路径Windows

我在Windows上工作,并且文件路径带有非ASCII符号。对于使用wstring的非ASCII符号窗口。我正在执行转换并将它们传递给luaL_dofile,但由于找不到文件而失败。 ...

回答 1 投票 0

将Unicode输出到控制台的最佳方法是什么?

我正在Visual Studio 2019中使用C ++ 17。我已经阅读了一些有关编码的文章,但是我对它们仍然不太满意。我想将UNICODE字符输出到屏幕。为此,我正在使用...

回答 1 投票 2

为什么我不能从char *构建一个wstring *

据我构建,从此代码填充一个char *:char * pathAppData = nullptr; size_t sz = 0; _dupenv_s(&pathAppData,&sz,“ APPDATA”);我可以使用此代码轻松构造一个字符串,然后附加...

回答 1 投票 0

使用memcpy将矢量数据复制到wstring的正确方法

我有原始数据:47 00 61 00 6D 00 65 00 41 00 73 00 73 00 65 00 74 00 = G.a.m.e.A.s.s.e.t.并将其存储在vector 数组中的位置15。现在,我要将其复制到wstring值...

回答 1 投票 0

POST请求已被wstring类型截断并使用字符串格式正确

我想使用Wininet和utf-8特殊字符(如€)发出POST请求。 void sendArticle(){LPCWSTR浏览器= L“ MyClientApp / 1.0”; LPCWSTR域= L“ 127.0.0.1”; LPCWSTR方法= L“ ...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.