c++ - Visual Studio 强制使用没有签名文件编码的 UTF-8

标签 c++ visual-studio qt visual-studio-2012 encoding

我正在使用 Qt5 以及 Visual Studio 2012,最近编写了一个记录器类,它基本上将字符串流重定向到文件。前几天我意识到没有“特殊”字符支持(例如波兰语、德语、俄语)。

qDebug() << "Special characters: ąężźćłóĄĘŻĆŁÓ";

正在产生以下输出:

Special characters: �꿟����ʯƣ�

我在 File -> Advanced Save Options 中尝试了多个 Unicode 设置。

enter image description here

但是,没有选项可以在没有 BOM 签名的情况下保存文件,我认为这可能是问题所在,因为当我通过 Notepad++ 将文件编码更改为 UTF-8 时(没有 BOM),然后编译,一切正常......不幸的是,直到我在 Visual Studio 中进行任何更改。

我还尝试将编译器编码设置为 Unicode:

enter image description here

Visual Studio 有什么解决方案可以将编码更改为无 BOM 签名的 UTF-8 吗?


写入文件的代码片段:

file = new QFile;
file->setFileName(fileName);
file->open(QIODevice::Append | QIODevice::Text);

[..]

QTextStream out(file);
out.setCodec("UTF-8");
out << QDateTime::currentDateTime().toString("dd.MM.yyyy hh:mm:ss ") << value << "\n";

我也一直在尝试使用 value.toUtf8()

最佳答案

在多次尝试失败后,我有两种可能来解决编码问题:

  1. Visual Studio 插件:https://vlasovstudio.com/fix-file-encoding/ ,此插件可防止 Visual Studio 将 BOM 添加到文件的开头,这样我的所有文件都可以采用 UTF-8 编码,并且原始字符串可以包含特殊字符,并且可以毫无问题地显示/写入它们,
  2. 这是@MrEricSir 在评论中建议的。这个想法是在包含特殊字符的字符串上使用 QStringLiteral 函数。

    像这样:QStringLiteral("ąśżęłóĄŚŻĘŁÓ");

我个人选择了第一种方法,因为它不会强制我每次想打印特殊字符时都使用其他函数。在这两种情况下,结果是相同的。

感谢所有发表评论并试图提供帮助的人。

关于c++ - Visual Studio 强制使用没有签名文件编码的 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40030153/

相关文章:

c++ - 是否可以从 .sln 文件读取/检索 C++ 源代码?

c++ - 链接到MS Visual C上的protobuf 3时出错

c++ - 平滑倾斜线

c++ - Qt QFrame StyleSheet 在 MainWindow 中不工作

c++ - Linux 进程可以拥有的最小进程 ID 是多少?

c++ - 模板返回类型为 : compiler fails at derived class with pointertype as template argument (MSVC 2013) 的虚基函数

c++ - 在 C++11 中创建 N 元素 constexpr 数组

c++ - 我如何在 C++ 中追加一个 struct Person

c++ - boost::enable_if_c<> 条件参数是否使用短路?

asp.net-mvc - 无法在 cshtml 中加载 ReportViewerForMvc 引用