1. 程式人生 > >如何在Qt程式設計中識別是UTF-8還GBK編碼

如何在Qt程式設計中識別是UTF-8還GBK編碼

在最近的專案中,我們需要讀取在mp3音樂檔案中的metadata。如果大家有興趣的話,可以參閱我的github專案:


https://github.com/liu-xiao-guo/coverinfo


我們知道,現在的很多流行的軟體都可以去修改一個mp3音樂檔案的metadata裡的內容,比如再Ubuntu系統中的的easytag。當我們儲存這些資訊的時候,有些人會選取不同的文字編碼UTF-8或者是GBK。那麼當我們讀取這寫metadata裡的文字時,直接顯示,可能會有問題,那麼我們怎麼來判定是那種編碼格式呢?


我的解決辦法是編寫如下的一個方法:
/ The following function will detect whether the strng is encoded in UTF-8 or GBK
QString SongList::getCorrectUnicode(QString input) {
    QTextCodec::ConverterState state;
    QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    QString text = codec->toUnicode( input.toLatin1().constData(),
                                     input.toLatin1().size(), &state);
    if (state.invalidChars > 0) {
        text = QTextCodec::codecForName( "GBK" )->toUnicode(input.toLatin1());
    } else {
        text = input;
    }


    return text;
}


這個方法的目的是把我們讀取的metadata裡的文字,通過上面的method來檢查字串是否為一個UTF-8的編碼,如果不是,我們直接進行轉換為unicode。當然我這樣處理只是針對中文的情況。如果需要處理其它國家的文字,我們需要用其它的方法來更一步來處理。