【问题标题】:VS 2019 C++ compiler cant compile some stringsVS 2019 C++ 编译器无法编译一些字符串
【发布时间】: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


【解决方案1】:

如果您需要 UTF-16 字符串横向,您可以使用如下语句:

 char16_t str[] = u"Виян Лиже Первомай";

但是,当然,这取决于您使用的 FString 类的实现。

【讨论】:

    【解决方案2】:

    为了解决编译问题,我 File -> Save as -> near save button arrow -> Save with encodig -> Choose UTF-8

    【讨论】:

      猜你喜欢
      • 2021-03-08
      • 2020-01-27
      • 1970-01-01
      • 2020-03-06
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      相关资源
      最近更新 更多