Re: Чтение текстовых файлово в формате Unicode
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 08.09.04 03:51
Оценка: 1 (1)
Здравствуйте, mmmaloy, Вы писали:

M>Привет всем

M>Вобщем надо осуществить построчное чтение данных из текстового файла, но в Unicode
M>CStdioFile::ReadString — нормально читает, если только файл не юникоде, если юникоде — то бяку дает.

Здесь
Автор: SchweinDeBurg
Дата: 01.09.04
смотрели?
- Искренне ваш, Поросенок Пафнутий
Чтение текстовых файлово в формате Unicode
От: mmmaloy Германия  
Дата: 07.09.04 17:58
Оценка:
Привет всем
Вобщем надо осуществить построчное чтение данных из текстового файла, но в Unicode
CStdioFile::ReadString — нормально читает, если только файл не юникоде, если юникоде — то бяку дает.
Re: Чтение текстовых файлово в формате Unicode
От: mmmaloy Германия  
Дата: 07.09.04 19:06
Оценка:
Попробово так, результат аналогичен: когда файл не уникоде все нормально (цикл 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);
    }
Re[2]: Чтение текстовых файлово в формате Unicode
От: mmmaloy Германия  
Дата: 08.09.04 12:24
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>Здесь
Автор: SchweinDeBurg
Дата: 01.09.04
смотрели?


Посмотрел. Спасибо.
Но, хотелось бы ответ получить в виде минимального кода для записи/чтения построчно текста уникоде.
Re: Чтение текстовых файлово в формате Unicode
От: mmmaloy Германия  
Дата: 11.09.04 14:14
Оценка:
Првиет всем. Что то у меня не выходит со строками
В идеале мне надо было прочитать из уникодного файла, созданного блокнотом (причем кодировка смешанная), строки. Итак, как я понял, в уникоде выделяется по 2 байта на символ, в уникоде по стандарту каждому символу из разнообразных языков соответсвует свой код. Казалось бы чего проще — взять уникодный файл и прочитать, ну или записать. Дык не получается, чего только не перепробовал. Может стоит записать строку в режиме byte , в том же режиме читать и потом преобразовывать. Не поможете код накидать. Сишный, STL (потоки), или MFC способ — для меня никакой разницы нет, лиж бы работоло.

И еще, если правильно вообще понял, блокнот помещает в начало файла что-то типа метки, которая указывает на то что файл уникоде, а то вечно один и тот же набор символов?
Re: Чтение текстовых файлово в формате Unicode
От: mmmaloy Германия  
Дата: 11.09.04 15:38
Оценка:
В принципе, вот в C-ном варианте запись:

      FILE *stream;
    wchar_t   s[] = _T("Это юникоде, UNICODE, ??? ???\n");
    
    stream = _tfopen( _T("test.txt"), _T("w+b") );
        
    _fputts(s, stream);
    _fputts(s, stream);
    _fputts(s, stream);
    
    fclose( stream );


Блокнотом файл открывается правильно, за исключение символа новой строки "\n", как исправить?
копаю дальше
Re: Чтение текстовых файлово в формате Unicode
От: mmmaloy Германия  
Дата: 11.09.04 15:57
Оценка:
А вот чтение:
      FILE *stream;
    wchar_t   s[100];
    
    stream = _tfopen( _T("test.txt"), _T("r+b") );
        
    _fgetts( s, 100, stream );
    _fgetts( s, 100, stream );
    _fgetts( s, 100, stream );
    
    fclose( stream );


Кстати если код редактировался в блокноте первый символ имеет код 65279, что поддтверждает мои подозрения об метке уникодности.

Ps: А можно ли эту ветку в формум C++ перенести
PSs: А как в с++ варианте сделать?
Re: Чтение текстовых файлово в формате Unicode
От: mmmaloy Германия  
Дата: 11.09.04 16:46
Оценка:
Вот запись в файл с использованием MFC (запись)

CStdioFile File(_T("MFCunicode.txt"), CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);

wchar_t s[] = _T("Это юникоде, UNICODE, ??? ???");
wstring wstr=_T("А это дополнительная строка wstring ????");

File.WriteString(s);//, sizeof(s));
File.Write(s, sizeof(s));
File.WriteString(wstr.c_str());

File.Close();
Re: Чтение текстовых файлово в формате Unicode
От: mmmaloy Германия  
Дата: 11.09.04 17:08
Оценка:
Ну и чтение из файла.
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: Все это вложенно здесь, т.к. на формуме поиск ничего не дал (можно найти только вопросы без ответов), а ответить мне чего-то все постетнялись Но все равно всем спасибо
Re[2]: Чтение текстовых файлово в формате Unicode
От: Boot32 Россия  
Дата: 12.10.06 04:34
Оценка:
Удалено избыточное цитирование. — SchweinDeBurg

Здравствуйте, mmmaloy, Вы писали:

M>Попробово так, результат аналогичен: когда файл не уникоде все нормально (цикл while выполняется верное количесто раз), если уникоде — бяка и цикл while — один раз выполняется


M>
M>    if ((file = _tfopen(wchar_FileName,_T("r")))!=NULL)
M>    {
M>        ...
M>    }
M>


В описании функции _tfopen зказано, что для чтения в Unicode кодировке необходимо, в режиме открытия файла указать название кодировки. Ваш пример будет выглядеть следующим образом:


if ((file = _tfopen(wchar_FileName, _T("r, ccs=UNICODE"))) != NULL)
{
   ...
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.