可以强制CMake/MSVC对没有BOM的源文件使用UTF-8编码吗?C4819

ca1c2owp  于 2023-08-05  发布在  其他
关注(0)|答案(3)|浏览(186)

我们所有的源代码都是有效的UTF-8,但是Windows上的一些用户无法构建它们,因为他们的系统配置为不同的编码。
在不向源文件添加BOM的情况下,是否可以告诉MSVC将所有源文件都视为UTF-8,而不管用户的系统编码?
See MSDN's link regarding this topic(需要添加BOM标题)。

mnowg1ta

mnowg1ta1#

您可以尝试:

add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")

字符串
默认情况下,Visual Studio会检测字节顺序标记,以确定源文件是否为编码的Unicode格式,例如UTF-16或UTF-8。如果未找到字节顺序标记,则假定源文件是使用当前用户代码页编码的,除非您使用/utf-8/source-charset选项指定了代码页。

参考文献

xxls0lw8

xxls0lw82#

如果您碰巧创建了跨平台代码来使用命令行开关解决问题,这意味着

add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")

字符串
或者在CFLAGs上添加/utf-8/source-charset之类的东西可能意味着您也必须为其他平台做类似的事情。
因此,如果可能的话,最好避免这个问题,而不是解决它,在字符串中使用\uxxxx而不是unicode字符:这样,源代码指定了要使用的unicode字符,但实际上并不包含它们。

mnowg1ta

mnowg1ta3#

-DCMAKE_CXX_FLAGS="/utf-8" -DCMAKE_C_FLAGS="/utf-8"添加到CMake命令行。

相关问题