我想要创建一些处理编码的示例程序,特别是我想使用宽字符串,例如:
wstring a=L"grüßen";
wstring b=L"שלום עולם!";
wstring c=L"中文";因为这些都是示例程序。
这是绝对微不足道的gcc,把源代码作为UTF-8编码的文本。但是,简单的编译在MSVC下不起作用。我知道我可以使用转义序列对它们进行编码,但我更愿意将它们保留为可读的文本。
是否有任何选项,我可以指定为"cl“的命令行开关,以使这项工作?有像gcc'c -finput-charset这样的命令行开关
如果不是,你会建议如何使文本对用户自然?
注意:将BOM添加到UTF-8文件不是一个选项,因为其他编译器无法编译它。
Note2:我需要它在MSVC版本>= 9 == VS 2008中工作
的真正答案是:没有解决方案
发布于 2016-06-10 09:14:30
对于那些订阅“迟到总比从来没有好”的人来说,Visual 2015 (编译器的19版)现在支持这一点。
新的/source-charset命令行开关允许您指定用于解释源文件的字符集编码。它接受一个参数,可以是IANA或ISO字符集名称:
/source-charset:utf-8或特定代码页的十进制标识符(前面有一个点):
/source-charset:.65001正式的文档是这里,VisualC++团队博客上也有描述这些新选项的详细文章。
还有一个互补的交换机,它以完全相同的方式工作,但控制如何在可执行文件中生成狭窄的字符和字符串文字。最后,有一个快捷开关/utf-8,它同时设置了/source-charset:utf-8和/execution-charset:utf-8。
这些命令行选项与旧的#pragma setlocale和#pragma execution-character-set指令不兼容,它们全局应用于所有源文件。
对于停留在较早版本编译器上的用户,最好的选择仍然是使用BOM将源文件保存为UTF-8 (其他答案表明,IDE在保存时可以做到这一点)。编译器将自动检测到这一点,并进行适当的操作。GCC也是如此,他在源文件开始时也接受BOM,而不会窒息而死,因此这种方法在功能上是可移植的。
发布于 2009-11-02 12:03:53
打开File->Advances Save Options...,在编码组合中选择Unicode(UTF-8 with signature) - Codepage 65001。编译器将自动使用选定的编码。

根据微软的答案这里
如果您想要非ASCII字符,那么获取这些字符的“官方”和可移植的方法是使用\u (或\U)十六进制编码(我同意,这是非常丑陋和容易出错的)。 当编译器面对一个没有BOM的源文件时,编译器会在文件中预先读取一定的距离,以查看它是否能够检测到任何Unicode字符--它专门查找UTF-16和UTF-16BE --如果没有找到它们,那么它假设它有MBCS。我怀疑,在这种情况下,它回到了MBCS,这就是导致问题的原因。 显式确实是最好的,所以尽管我知道这不是一个完美的解决方案,我建议使用BOM。 乔纳森凯夫斯 可视化C++编译器团队。
好的解决方案是在资源文件中放置文本字符串。使用方便,携带方便。您可以使用本地化库(如gettext )来管理翻译。
发布于 2012-06-12 10:12:01
我们使用的流程:将文件保存为UTF8 8-使用BOM,在linux和windows之间共享相同的源代码,对于linux:通过编译命令对源文件进行预处理以删除BOM,在中间的非BOM文件上运行g++。
https://stackoverflow.com/questions/1660712
复制相似问题