Привет всем
Вобщем надо осуществить построчное чтение данных из текстового файла, но в Unicode
CStdioFile::ReadString — нормально читает, если только файл не юникоде, если юникоде — то бяку дает.
Попробово так, результат аналогичен: когда файл не уникоде все нормально (цикл while выполняется верное количесто раз), если уникоде — бяка и цикл while — один раз выполняется
FILE *file;
wstring wstr_FileName = FileNamePrm;
wchar_t load_string[100];
wchar_t wchar_FileName[MAX_PATH];
TCHAR w_Symb;
_tcscpy(wchar_FileName, wstr_FileName.c_str());
if ((file = _tfopen(wchar_FileName,_T("r")))!=NULL)
{
while (_fgetts( load_string, 100 , file )!=NULL)
{
w_Symb = load_string[0];
// тут еще кой чего будет
}
fclose(file);
}
Здравствуйте, mmmaloy, Вы писали:
M>Привет всем M>Вобщем надо осуществить построчное чтение данных из текстового файла, но в Unicode M>CStdioFile::ReadString — нормально читает, если только файл не юникоде, если юникоде — то бяку дает.
Првиет всем. Что то у меня не выходит со строками
В идеале мне надо было прочитать из уникодного файла, созданного блокнотом (причем кодировка смешанная), строки. Итак, как я понял, в уникоде выделяется по 2 байта на символ, в уникоде по стандарту каждому символу из разнообразных языков соответсвует свой код. Казалось бы чего проще — взять уникодный файл и прочитать, ну или записать. Дык не получается, чего только не перепробовал. Может стоит записать строку в режиме byte , в том же режиме читать и потом преобразовывать. Не поможете код накидать. Сишный, STL (потоки), или MFC способ — для меня никакой разницы нет, лиж бы работоло.
И еще, если правильно вообще понял, блокнот помещает в начало файла что-то типа метки, которая указывает на то что файл уникоде, а то вечно один и тот же набор символов?
CStdioFile File(_T("MFCunicode.txt"), CFile::modeRead | CFile::typeBinary);
wchar_t s[100];
CString mfc_str;
File.ReadString(mfc_str); //и так идет
File.Read(s, 100 ); //и так тоже (только весь файл пытатся грузить, если обьема "s" хватит :) )
File.Close();
Вот на этом вроде бы и все.
PS: Все это вложенно здесь, т.к. на формуме поиск ничего не дал (можно найти только вопросы без ответов), а ответить мне чего-то все постетнялись Но все равно всем спасибо
Здравствуйте, mmmaloy, Вы писали:
M>Попробово так, результат аналогичен: когда файл не уникоде все нормально (цикл while выполняется верное количесто раз), если уникоде — бяка и цикл while — один раз выполняется
M>
В описании функции _tfopen зказано, что для чтения в Unicode кодировке необходимо, в режиме открытия файла указать название кодировки. Ваш пример будет выглядеть следующим образом: