簡體   English   中英

Visual Studio強制UTF-8沒有簽名文件編碼

[英]Visual Studio force UTF-8 with no signature file encoding

我正在使用Qt5 和Visual Studio 2012,並且最近編寫了一個記錄器類,它基本上將字符串流重定向到文件。 有一天,我意識到沒有“特殊”角色支持(例如,波蘭語,德語,俄語)。

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

產生以下輸出:

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

我嘗試過多個Unicode設置,在File - > Advanced Save Options監聽。

在此輸入圖像描述

但是,沒有選項可以保存沒有BOM簽名的文件,我認為這可能是問題,因為當我通過Notepad ++將文件編碼更改為UTF-8 (without BOM) ,然后編譯時,一切正常。 ..不幸的是,直到我在Visual Studio中進行任何更改。

我也嘗試將編譯器編碼設置為Unicode:

在此輸入圖像描述

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("ąśżęłóĄŚŻĘŁÓ");

我個人選擇了第一種方法,因為每次我想打印特殊字符時都不會強迫我繼續使用其他功能。 在這兩種情況下,結果都是一樣的。

感謝所有發表評論並試圖提供幫助的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM