2017-06-27 86 views
3

我必須在非常簡化的系統上工作。它基於Ubuntu,但未安裝Ubuntu安裝程序。所以他們只是真正需要的軟件包和配置。 QtCreator已安裝並正常工作。Qt:文件名中的非ASCII字符被替換爲'?'

當我嘗試創建一個非ASCII字符的文件時,該字符被替換爲?。例如:TestÄ.txt將被命名爲Test?.txt。但是這隻發生在我使用Qt函數的時候。 C++標準庫的作品。

實施例:

#include <QDebug> 
#include <QFile> 
#include <fstream> 

int main(int, char *[]) 
{ 
    const char* fileName = "TestÄ.txt"; 
    qDebug() << fileName; 

    { 
     QFile f(fileName); 
     f.open(QIODevice::WriteOnly); 
     f.write("QFile Äößń\n"); 
    } 

    { 
     std::ofstream f; 
     f.open(fileName, std::fstream::app); 
     f << "std::ofstream Äößń\n"; 
    } 

    return 0; 
} 

應該有一個文件TestÄ.txt與兩行。但第一個塊創建文件Test?.txt。第二塊按預期工作。文件的內容寫入正確。

+1

如果源文件編碼Latin1的,你可以試試'一個QFile F(QString的:: fromLatin1(文件名));'QT5假設' UTF-8「。 – m7913d

+0

嘗試使用'setlocale(LC_ALL,「」)'設置正確的語言環境。 –

+1

如果問題不是代碼,它可能是您用於[文件系統中的名稱](https://serverfault.com/a/87087)的字符編碼。 –

回答

1

系統語言環境未設置。我沒有意識到這是因爲有人在.bashrc中添加了配置,所以在終端中設置了區域設置。

爲了解決這個問題,我創建的文件/etc/default/locale的內容:

LC_ALL="en_US.UTF-8" 
LANG="en_US.UTF-8" 
0

這可能是因爲你的編譯器不知道如何在源文件中處理Ä

你可以試試"Test\xC3\x84.txt"(或u8"TestÄ.txt"如果你有C++ 17)。

另請注意,QFile構造函數會將您的char數組轉換爲QString。如果您想檢查如何去您可以添加:

qDebug() << QString(fileName).toUtf8().toHex(); // Should print "54657374c3842e747874" 

,並檢查是否有0xC384Ä

相關問題