相关疑难解决方法(0)

具有u8,char8_t和std :: string的C ++ 20

C ++ 11给我们带来了UTF-8字面量的u8前缀,几年前我认为这很酷,并在代码中添加了以下内容:

std::string myString = u8"?";
Run Code Online (Sandbox Code Playgroud)

一切都很好,但是在C ++ 20中出现了问题,因为u8创建了char8_t *,并且与仅使用char的std :: string不兼容,因此似乎不再可以编译了。

我应该创建一个新的utf8string吗?在C ++ 20世界中,如果我们有更显式的类型与标准std :: string完全不匹配,那么一致的正确方法是什么?

c++ stdstring c++20

24
推荐指数
3
解决办法
1238
查看次数

在 C++17 和 C++20 之间可移植地使用 UTF-8 字符串文字前缀

我有一个用 C++17 编写的代码库,它大量使用 UTF-8,以及u8c++11 中引入的字符串文字来指示 UTF 编码。然而,c++20 将C++ 中u8文字的含义从生成 a charor更改const char*为 a char8_tor const char8_t*;后者不能隐式指针转换const char*.

我希望这个项目能够支持在 C++17 和 C++20 模式下运行而不会出现中断;可以采取什么措施来支持这一点?


目前,该项目使用的char8别名使用文字的类型结果u8

// Produces 'char8_t' in C++20, 'char' in anything earlier
using char8 = decltype(u8' ');
Run Code Online (Sandbox Code Playgroud)

但这种方法存在一些问题:

  1. char不保证是无符号的,这使得从数值生成代码点不可移植(例如,char8{129}用 中断char,但不能用 中断char8_t)。

  2. char8char与C++17 中没有区别,后者可能会破坏现有代码,并可能导致错误。

  3. 从第 2 点继续,不可能在 C++17 中重载char …

c++ utf-8 string-literals c++17 c++20

5
推荐指数
1
解决办法
684
查看次数

Visual Studio 2019 C++ 项目中的特殊字符并用它们执行 CMD 命令

首先,我只想在控制台中使用波罗的海字符并用它们执行 CMD 命令,但问题是从默认/标准控制台 C++ 应用程序开始的。

\n
#include <iostream>\nint main() {\n    string output = "\xc4\x81\xc4\x81\xc4\x81\xc4\x8d\xc4\x8d\xc4\x8d\xc4\x93\xc4\x93\xc4\x93\xc4\x93";\n\n    cout << output << endl;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

早些时候,我在堆栈上提出了这个问题 - How to use UTF8characters in DEFAULT C++ Project OR when using mysql Connector for C++ in Visual Studio 2019 (Latin7_general_ci to UTF-8)?

\n

我在测试中发现:如果我将 UTF8 字符串转换为 Latin1 字符串,然后 cout 或打印十六进制值,我会在控制台中输出一些特殊字符。例如 -

\n
**char s2[256] = "\\xc3\\xa9";**  printed is outputted as "\xc4\xb7" THAT MEANS I need to convert strings into correct HEX values when it is needed, and some …
Run Code Online (Sandbox Code Playgroud)

c++ utf-8 iso-8859-1 visual-studio

0
推荐指数
1
解决办法
1567
查看次数