2

私はそのようなファイルを持っています。ラテン語以外の名前のファイルを正しく開きたいだけです。
ラテン語以外の名前だけのラテン語の名前を持つファイルには問題はありません。

ここに画像の説明を入力してください

ディレクトリのスキャンにQDirを使用し、QStringで名前を保持しているので、内部で正常に保持されます。

ただし、ファイルを開く際のボトルネックがあります。
QFileを使用したくないので、C ++ストリーム(より推奨)またはCファイルのみを使用できます。

ファイルを開きたいときは、次のようにします。

fstream stream(source.toStdString().c_str(),ios_base::in | ios_base::binary);

その後、試行が成功したかどうかを確認します。

  if(!stream.is_open())
   { cout<<"file wasn't opened " <<source.toStdString().c_str())<<"\n";
     return false; // cout was redirected to file // just a notice
   }

ログファイルを取得しました:
ファイルが開かれていませんでした/home/sh/.mozilla/firefox/004_ ??????? -????? -?????。mp3

ラテン語以外の名前のファイルでは機能せず、ラテン語の名前を持つすべてのファイルで正常に機能します。

この問題はQFileを使用して飛び越えることができることを理解しています。

しかし、サードパーティのライブラリなしでそれを実行することは可能ですか、それともそれを解決するための別の方法がありますか?

ヒントを事前に感謝します。

4

1 に答える 1

3

toStdString()QStringを呼び出すと、問題が発生します。設定されている場合は、に基づいて内容を変換し、QTextCodec::codecForCStrings()それ以外の場合はlatin-1を使用します。Latin-1は、非ラテン文字を「?」に折りたたみます。

source.toLocal8Bit().data()またはを代わりに使用source.toUtf8().data()すると、必要な処理が実行される可能性がありますが、失敗した場合は、適切な8ビットエンコーディングを取得するためにQTextCodecsを処理する必要があります。

于 2012-12-12T00:45:54.843 に答える