【发布时间】:2021-06-06 17:50:58
【问题描述】:
我遇到了一些奇怪而愚蠢的情况。我有这部分代码:
FString x = TEXT("ааааааа");//Russian language (line 54)
Caesar* ciph = new Caesar;// (line 55)
当我尝试编译我的项目时,我遇到了这样的错误:
../Widget_Manager.cpp(54): 错误 C2001: 常量换行
../Widget_Manager.cpp(55):错误 C2146:语法错误:缺少 ';' 在标识符“Caesar”之前
如果我更改 54 行,最有趣的事情(至少对我而言):
FString x = TEXT("абвгдеё");//Russian language (line 54)
或
FString x = TEXT("abcdefg");//English language (line 54)
或者如果我从俄语“аааааа”中删除 1 个“a”。编译好了。
我还尝试以不同的方式敲击键盘,并发现了其他未编译的俄语字母组合,例如:риорыва 和 нкешшур。
没有TEXT() 宏的工作类似。
据我了解,俄语包含以 UTF-16 开头。 FSrigs 是 UTF-16。我唯一可以将编译器的行为与之关联的是(据我所知)默认情况下它在 UTF-8 中工作(无论这意味着什么)。
如果有人能理解并解释发生了什么,我会很高兴。
我在 Visual Studio 2019 中工作,UE 4.26.1。
/////////////////////////////////////// /
后记:
问题已解决,但问题是:“为什么某些俄语字母组合被编译编码而其他组合未编译(在 Cyrillic windows 1251 上)?”仍然存在。
【问题讨论】:
-
您的源文件是什么编码(多字节、UTF-8、UTF-16、UCS-2)?如果是UTF,是否有字节序标记? UTF-8 完全能够存储由 Unicode 定义的任何字符——使用 Cyrillic 绝不要求您使用 UTF-16。
-
将文件保存为 UTF-8 并添加
/utf-8编译器标志。 -
@Guillaume 这显然是由于编码保存选项,默认情况下文件保存为西里尔文(1251)(尽管我的控制台项目使用 UTF-8 保存)。我发现 UE 是俄语(我的 VS-2019 是英语),但是当我更改这些设置并创建新项目时,它会保存与 Cyrillic (1251) 类似的 VS 文件。
-
感谢大家的帮助和信息(我不能标记超过1个人),我的即时编译问题已经解决,但我还有一些悬而未决的问题,也许我会单独询问
标签: c++ visual-studio compiler-errors unreal-engine4