C++ 无法使用UTF-8编码解码main.cpp

C++ 无法使用UTF-8编码解码main.cpp,c++,macos,qt,utf-8,character-encoding,C++,Macos,Qt,Utf 8,Character Encoding,我有一个visualstudioqt/C++项目(来自中国,不确定这是否重要,因为汉字有时有点棘手)。当我在macOS(我的首选操作系统)上的QtCreator(我的首选IDE)上打开它时,我得到 Could not decode main.cpp with UTF-8 ecoding. Editing not possible. 如果单击选择编码并选择系统,则可以正常编辑。我甚至可以保存和关闭文件,但当我再次打开它时,同样的事情就会发生 我注意到有一些注释显示为)/???????�?????

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

Could not decode main.cpp with UTF-8 ecoding. Editing not possible.
如果单击
选择编码
并选择
系统
,则可以正常编辑。我甚至可以保存和关闭文件,但当我再次打开它时,同样的事情就会发生

我注意到有一些注释显示为
)/???????�??????????UI
这似乎是一个与重唱相关的问题

如何处理这个问题

系统
编码是什么意思

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

而且文件似乎不是UTF8:

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

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

我怀疑它包含无效的UTF-8字符。在Qt论坛上也是一个问题。其中一条评论说

我发现这是因为FTDI的头文件包含版权符号。我只是把它改成了(C)而不是版权符号,这很好


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

建议的在线工具显示“导入成功!以纯文本形式导入main.cpp(2.51KB)”。我想这意味着它是一个有效的UTF8。请尝试该命令?它要好得多,我认为之前建议的在线工具并不总是有效的,我只是在两者上测试了一个文件,在线工具说可以,而命令说不行。请尝试使用我编辑答案时使用的命令检查您的文件。您可以通过在终端中键入
locale
来检查系统编码。如果源代码仅包含纯ASCII(没有代码点大于127的字符),则无法检测到ASCII和UTF-8之间的差异。(关于前128个代码点,UTF-8和ASCII是相同的。这是有意的。)我将剥离resp。来自那个来源的角色,你不应该再麻烦了。(我猜即使打印正确,您也无法阅读中文注释。)您是指手动编辑文件?我有太多的文件去编辑它们。有没有关于如何实现自动化的建议?嗯。。。可能是bash/sed或bash/awk,甚至是bash/Python?Unix上还有一个
tr
命令,它可能会有所帮助。(如果你不熟悉上面的任何一个,你可以在C++中编写一个助手程序。它可能是一个10行。)出现乱码的注释表示原始文件作者使用了不同的编码。除了尝试几种编码,看看你是否得到了一些有意义的东西之外,没有什么好方法来确定是哪种编码。您可以使用
iconv
命令重新编码文件,但需要知道源编码。