个人觉得 win msvc 的做法是不对的。c++11 的标准引入 u8, u 这些做法也是自讨苦吃。
我的做法是所有的源代码都要求是 utf-8,直接用 "" 普通字符串表达式,在 windows 底下,要求 msvc 使用 utf-8 编码:
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
https://docs.microsoft.com/en-us/cpp/build/reference/utf-8-set-source-and-executable-character-sets-to-utf-8
utf-8 早就是趋势了。异端都应该被吊死。
【 在 milksea (肥了,又肥了 >>>_<<<) 的大作中提到: 】
: 主流编译器就是 utf-16 和 utf-32 两种,和实现有关,但和源代码编码无关。
: c++主流实现的 input encoding 和 exec encoding 是解耦的,也都可以通过选项改,编译器内码都是某种 unicode。比方说 msvc,只要带 bom,编译器就自动识别 utf-8 和 utf-16,不带就默认 acp,但对 char[] 字面量就都默认 acp 除非设置 exec enc,而 L 字面量都是 utf-1
--
FROM 110.81.40.*