2012-01-20 21 views
0

我正在嘗試讀取並打印可能包含或不包含UTF-8代碼的文件。使用Qt檢測和打印Unicode字符

我的例子包含:


\ u22a2

我niave代碼:

QFile file("/path/qteststream.txt"); 

    if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) 
     std::cout << "Fail" << std::endl; 

    QTextStream stream(&file); 
    QTextStream qout(stdout); 
    stream.setAutoDetectUnicode(true); 

    while(!stream.atEnd()) 
     qout << stream.readLine() << endl; 

但很明顯,林做錯了什麼。我期望\ u22a2被打印爲一個Unicode字符,但程序只是打印字符串。我怎樣才能打印像字符序列?

+0

輸入文件字面上是否包含確切的字符串「\ u22a2」?或者你是否使用另一個程序來編寫實際的字符'\ u22a2'?如果是第一個,我懷疑QT流類會自動轉換它。 –

+0

是的,'\ u22a2'包含一個字符串。我應該手動轉換它嗎? – TeaOverflow

回答

4

\u22a2可能會被C++編譯器解釋爲Unicode字符,但事情在源代碼之外是不同的。在文本文件中,\u22a2僅爲6個字符(\,u,2,2,a2)。嘗試將直接粘貼到文本文件中。

如果您有意在文本文件中有\u22a2並且想要將其轉換爲Unicode字符,您可能需要檢查this post

+0

好吧,其實我試圖讓用戶搜索表格並複製和粘貼字符。所以,我應該只查找以'\ u'開頭的字符串並使用'QString :: fromUtf8()'轉換它們? – TeaOverflow

+0

@EvgeniB .:查看答案中的鏈接。 – 2012-01-20 15:40:28

1

\u轉義碼僅用於C/C++文件,不用於輸入文件。 「Unicode自動檢測」意味着該文件可以是UTF-8(ASCII作爲子集也可以),或者UCS-2與BOM,並且對於您的應用程序將是透明的。