【问题标题】:Could not decode main.cpp with UTF-8 ecoding无法使用 UTF-8 编码解码 in.cpp
【发布时间】:2021-05-14 21:51:32
【问题描述】:

我有一个 Visual Studio Qt/C++ 项目(来自中国,不确定这是否重要,所以在这里提一下,因为汉字有时有点棘手)。当我在 macOS(我的首选操作系统)上的 QtCreator(我的首选 IDE)上打开它时,我得到了

Could not decode main.cpp with UTF-8 ecoding. Editing not possible.

如果我点击Select Encoding 并选择System 则可以正常编辑。我什至可以保存并关闭文件,但是当我再次打开它时会发生同样的事情。

我注意到有一些 cmets 显示为 )//?????????????????? 和 //???????�??????????UI,这似乎是与编码有关的问题。

如何处理这个问题?

System 编码是什么意思?

在 SublimeText 上打开文件并使用编码 UTF8 保存似乎可以解决问题。但是我有很多文件,关于如何从命令行为所有文件执行此操作的任何建议?

而且文件似乎不是 UTF8:

$ file main.cpp
main.cpp: c program text, ISO-8859 text

最后我去了QtCreator,工具,选项,文本编辑器,行为,文件编码并将默认编码设置为ISO-8859-1。现在 QtCretor 方面没有更多的抱怨了。这样做有什么缺点吗?

【问题讨论】:

  • 您可以在终端输入locale来检查系统编码。
  • 如果源代码仅包含纯 ASCII(没有代码点 > 127 的字符),则无法检测到 ASCII 和 UTF-8 之间的差异。 (关于前 128 个代码点,UTF-8 和 ASCII 是相同的。这是故意的。)我会剥离相应的。来自那个来源的字符,你不应该再打扰了。 (我猜中文的cmets即使打印正确你也看不懂?)
  • 您的意思是手动编辑文件?我有太多文件要全部编辑。关于如何自动执行此操作的任何建议?
  • 嗯...也许是 bash/sed 或 bash/awk 甚至 bash/Python? Unix 上还有这个 tr 命令可能会有所帮助。 (如果你不熟悉上述任何一个,你可以用 C++ 编写一个帮助程序。它可能是一个 10-liner。);-)
  • 评论出现乱码表示原文件作者使用了不同的编码。没有好的方法可以确定哪一个,除了尝试几种编码,看看你是否得到了一些有意义的东西。您可以使用iconv 命令重新编码文件,但您需要知道源编码。

标签: c++ macos qt utf-8 character-encoding


【解决方案1】:

我怀疑它包含无效的 UTF-8 字符。 Here 是 Qt 论坛上的一个问题。其中一位 cmets 说

我刚刚发现了这一点,因为 FTDI 的头文件包含版权符号。我只是将其转换为 (C) 而不是版权符号,这很好。

你可以试试。如果不是这样,我建议您检查它是否是有效的 UTF-8 文本。你可以通过类似iconv -f UTF-8 your_file > /dev/null; echo $?这样的命令来检查它是否是有效的UTF-8,如果有效则返回0,如果无效则返回1。

【讨论】:

  • 建议的在线工具显示“导入成功!main.cpp (2.51KB) 以纯文本形式导入。”我猜这意味着它是一个有效的 UTF8。
  • 你能试试这个命令吗?它要好得多,我认为以前建议的在线工具并不总是有效,我只是在两者上测试了一个文件,在线工具说可以,而命令说不行。尝试使用我编辑答案的命令检查您的文件。
猜你喜欢
  • 2021-03-22
  • 2011-01-01
  • 2020-07-17
  • 2018-05-05
  • 2019-11-10
  • 1970-01-01
  • 2014-01-24
  • 1970-01-01
  • 2015-08-24
相关资源
最近更新 更多