Здравствуйте. Есть у меня несколько текстовых файлов (fb2) в разных кодировках (utf-8 и cp1251). Мне нужно, исходя из данных в этих файлах рассортировать их по каталогам. Я считываю данные, создаю каталоги. Вроде бы всё нормально, но в файловом менеджере эти каталоги сортируются не в алфавитном порядке, например, Ав..., Аб..., Аа..., Аб.... Тогда я проверяю кодировку каталога:
find ./ -iname 'Аб*' | enca
Universal transformation format 8 bits; UTF-8
Doubly-encoded to UTF-8 from ISO-8859-5
То есть из-за этой ISO-8859-5 они сортируются неправильно.
Код примерно такой:
QString firstName;
QString lastName;
QString title;
QByteArray temp;
bool b_firstName = false;
bool b_lastName = false;
bool b_title = false;
QString codename;
QTextCodec * codec;
while (!file.atEnd()) {
char c;
qint64 res = file.read(&c, sizeof(c));
if (res == -1) {
file.close();
error = true;
break;
}
if (c == '<') {
if (b_firstName) {
firstName = codec->toUnicode(temp);
} else if (b_lastName) {
lastName = codec->toUnicode(temp);
} else if (b_title) {
title = codec->toUnicode(temp);
}
temp.clear();
b_firstName = false;
b_lastName = false;
b_title = false;
} else if (c == '>') {
if (temp == "first-name" && firstName == "") {
b_firstName = true;
} else if (temp == "last-name" && lastName == "") {
b_lastName = true;
} else if (temp == "book-title") {
b_title = true;
} else if (temp == "/book-title") {
break;
} else if (temp.mid(0,4) == "?xml") {
int codenameindex = temp.indexOf("encoding=\"", 0);
int codenamestart = temp.indexOf("\"", codenameindex) + 1;
int codenameend = temp.indexOf("\"", codenamestart);
codename = temp.mid(codenamestart, codenameend - codenamestart);
codec = QTextCodec::codecForName(codename.toLatin1());
}
temp.clear();
} else {
temp.append(c);
}
}
if (error) {continue;}
file.close();
QString newDirName = currentDir.absolutePath().append("/").append(lastName).append(", ").append(firstName);
QDir newDir(newDirName);
if (!newDir.exists()) {
newDir.mkdir(newDirName);
}