【发布时间】: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