char8_t 和 unsigned char 的转义序列
Escape sequences for char8_t and unsigned char
尝试使用转义序列构建 char8_t
字符串(不依赖 file/compiler 编码),我遇到了 MSVC 问题。
我想知道这是一个错误,还是依赖于实现。
有解决方法吗?
constexpr char8_t s1[] = u8"\xe3\x82\xb3 \xe3\x83\xb3 \xe3\x83\x8b \xe3\x83\x81 \xe3\x83\x8f";
constexpr unsigned char s2[] = "\xe3\x82\xb3 \xe3\x83\xb3 \xe3\x83\x8b \xe3\x83\x81 \xe3\x83\x8f";
//constexpr char8_t s3[] = u8"コ ン ニ チ ハ";
static_assert(std::equal(std::begin(s1), std::end(s1),
std::begin(s2), std::end(s2))); // Fail on msvc
注意:
最终目标是用 std::filesystem::path(s1)
;
替换 std::filesystem::u8path(s2)
(自 C++20 起不推荐使用 std::filesystem::u8path)
这是 MSVC 中的一个错误,我希望在 Microsoft 实施 C++23 期间的某个时候得到修复。
从历史上看,字符和字符串文字中的数字转义序列在 C++ 标准中没有很好地指定,这导致了许多核心问题。这些问题已在本文的 P2029; a paper adopted for C++23 in November of 2020. The reported MSVC bug (along with an additional one related to non-encodeable characters) is discussed in the "Implementation impact" 部分解决。
如其他评论者所述,使用 universal-character-names(UCN)如 \u1234
将是避免依赖源文件编码的首选解决方案。
尝试使用转义序列构建 char8_t
字符串(不依赖 file/compiler 编码),我遇到了 MSVC 问题。
我想知道这是一个错误,还是依赖于实现。
有解决方法吗?
constexpr char8_t s1[] = u8"\xe3\x82\xb3 \xe3\x83\xb3 \xe3\x83\x8b \xe3\x83\x81 \xe3\x83\x8f";
constexpr unsigned char s2[] = "\xe3\x82\xb3 \xe3\x83\xb3 \xe3\x83\x8b \xe3\x83\x81 \xe3\x83\x8f";
//constexpr char8_t s3[] = u8"コ ン ニ チ ハ";
static_assert(std::equal(std::begin(s1), std::end(s1),
std::begin(s2), std::end(s2))); // Fail on msvc
注意:
最终目标是用 std::filesystem::path(s1)
;
std::filesystem::u8path(s2)
(自 C++20 起不推荐使用 std::filesystem::u8path)
这是 MSVC 中的一个错误,我希望在 Microsoft 实施 C++23 期间的某个时候得到修复。
从历史上看,字符和字符串文字中的数字转义序列在 C++ 标准中没有很好地指定,这导致了许多核心问题。这些问题已在本文的 P2029; a paper adopted for C++23 in November of 2020. The reported MSVC bug (along with an additional one related to non-encodeable characters) is discussed in the "Implementation impact" 部分解决。
如其他评论者所述,使用 universal-character-names(UCN)如 \u1234
将是避免依赖源文件编码的首选解决方案。