Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Unicode行分隔符编译UTF-8编码源代码_C_Visual Studio_Compiler Construction_Utf 8_Visual C++ - Fatal编程技术网

使用Unicode行分隔符编译UTF-8编码源代码

使用Unicode行分隔符编译UTF-8编码源代码,c,visual-studio,compiler-construction,utf-8,visual-c++,C,Visual Studio,Compiler Construction,Utf 8,Visual C++,使用最新版本的Microsoft编译器(包含在Win7 SDK中),我试图编译一个使用UTF-8和unicode行分隔符编码的源文件 不幸的是,即使我在文件的开头包含UTF-8签名,代码也无法编译。例如,如果我尝试编译以下内容: #include <stdio.h> int main (void) { printf("Hello!"); return 0; } #包括 内部主(空) { printf(“你好!”); 返回0; } 我将看到以下错误: 提示>cl

使用最新版本的Microsoft编译器(包含在Win7 SDK中),我试图编译一个使用UTF-8和unicode行分隔符编码的源文件

不幸的是,即使我在文件的开头包含UTF-8签名,代码也无法编译。例如,如果我尝试编译以下内容:

#include <stdio.h>

int main (void)
{
    printf("Hello!");
    return 0;
}
#包括
内部主(空)
{
printf(“你好!”);
返回0;
}
我将看到以下错误:


提示>cl测试.c

适用于80x86的Microsoft(R)32位C/C++优化编译器版本15.00.30729.01 版权所有(C)微软公司。版权所有

测试c test.c(1):警告C4067:预处理器指令后出现意外标记- 期待一条新线 Microsoft(R)增量链接器版本9.00.30729.01 版权所有(C)微软公司。版权所有

/输出:test.exe test.obj 链接:致命错误LNK1561:必须定义入口点


以前有人遇到过这个问题吗?有什么解决办法吗

谢谢! Andrew

当你说“unicode行分隔符”时,你是指UTF-16/UCS-2(即16位字符)?如果是这样的话(文件是不同编码的混合),我认为唯一合理的修复方法就是修复文件

如果您的意思是行尾是其他一些Unicode代码点(仍然以UTF-8编码),那么您仍然需要修复这些文件。标准对翻译的第一阶段作了这样的规定:

在定义的实现中映射物理源文件字符 方式,到基本来源 字符集(引入换行符) 行尾字符 (如有必要)

显然,MS不会对“unicode行分隔符”执行此翻译,因此您需要。

当您说“unicode行分隔符”时,您是指UTF-16/UCS-2(即16位字符)?如果是这样的话(文件是不同编码的混合),我认为唯一合理的修复方法就是修复文件

如果您的意思是行尾是其他一些Unicode代码点(仍然以UTF-8编码),那么您仍然需要修复这些文件。标准对翻译的第一阶段作了这样的规定:

在定义的实现中映射物理源文件字符 方式,到基本来源 字符集(引入换行符) 行尾字符 (如有必要)


显然,MS不会对“unicode行分隔符”执行此转换,因此您需要执行。

对我来说似乎很明显,在#include之后需要有一个新行


换行符仍然是unicode,所以添加一个换行符应该没什么大不了的。

对我来说似乎很明显,在#include之后需要有一个换行符

换行符仍然是unicode,因此添加一个换行符应该没什么大不了的。

您指的是传统的CR-LF字符

我猜编译器只希望使用CR和LF的组合。

您指的是传统的CR-LF字符


我猜编译器只期望CR和LF的某种组合。

向Microsoft提交了一份ID为414985的错误报告。无聊的。我们将看看结果如何。

向Microsoft提交了一份ID为414985的错误报告。无聊的。我们将看到它的效果。

使用Visual Studio的“高级保存选项”对话框,我将使用Unicode行分隔符指定UTF-8编码。行分隔符按原样编码为UTF-8。我使用了一个十六进制编辑器来验证新行值是否为“0xE2 0x80 0xA8”,这确实是utf8。但是VS并没有寻找0xE2 0x80 0xA8。它需要0x0d 0x0a。不管你在道德上是否正确,它都想要0x0a,这仍然是非常有价值的utf8。有趣。这是我从未使用过的选项。不幸的是,看起来MSVC不支持这种格式的源文件,即使编辑器支持(我想您可能希望您的程序能够处理这种数据文件)。好奇-你知道另一个编译器(GCC)是否知道吗?如果你强烈认为应该支持这种类型的源代码编码,你可以在上发布错误报告/更改请求。是的,我认为你是对的Logan。我只是希望有一些模糊的编译器选项,允许它支持这种编码,特别是因为编辑器对它的支持很好。谢谢大家的帮助。使用Visual Studio的“高级保存选项”对话框,我使用Unicode行分隔符指定UTF-8编码。行分隔符按原样编码为UTF-8。我使用了一个十六进制编辑器来验证新行值是否为“0xE2 0x80 0xA8”,这确实是utf8。但是VS并没有寻找0xE2 0x80 0xA8。它需要0x0d 0x0a。不管你在道德上是否正确,它都想要0x0a,这仍然是非常有价值的utf8。有趣。这是我从未使用过的选项。不幸的是,看起来MSVC不支持这种格式的源文件,即使编辑器支持(我想您可能希望您的程序能够处理这种数据文件)。好奇-你知道另一个编译器(GCC)是否知道吗?如果你强烈认为应该支持这种类型的源代码编码,你可以在上发布错误报告/更改请求。是的,我认为你是对的Logan。我只是希望有一些模糊的编译器选项,允许它支持这种编码,特别是因为编辑器对它的支持很好。谢谢大家的帮助。windows将新行编码为CRLF,而Unix将其编码为LF。Unicode定义试图通过定义“Unicode新行”来修复这些冲突的新行实现。这里可以阅读:windows将新行编码为CRLF,而as Unix将新行编码为LF。Unicode定义试图通过定义“Unicode新行”来修复这些冲突的新行实现