На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Модераторы: Qraizer
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Как считать UNICODE файл?
    Подскажите пожалуйста!
    Как вывести в окно Unicode файл в Visual C++ 6?
    Заранее благодарен
    Алексей
      WideCharToMultibyte() и MultibyteToWideChar()
        Присоединюсь к вопросу.
        До конверсии дело не доходит еще.
        Уже при чтении Unicod-овского файла
        у меня лажа получается.
        Как бы мне помочь?
          А в чем трабла то?
          чем файл читаем в какой буффер на чем зависаем?
            Да вот так:
            #include <stdio.h>
            int main ()
            {
            FILE *in;
            in = _wfopen(L"backup2000.log", L"rb");
            wchar_t buf[1000];
            while (!feof(in))
            {
            fgetws(buf, sizeof buf, in);
            wprintf(L"\%s\n", buf);
            }
            fclose(in);
            }
            Вся русская часть уникодовского файла при этом пропадает. Догадываюсь что что-то с setlocale не так, но насколько я понял, что в борланде, что в визуале она(setlocale) поддерживает только некую "C" locale.
              Пропадает куда?
              нет в буффере или при выводе буффера ничего не кажет?
              Вообще в двоичной моде никаких преобразований функции чтения не делают.
                Где-то в комментариях к этим функциям (казись MSN лопатил) есть коментарий к этим функциям, так там указано, что при указании текст-моды чтение производится как multybyte,
                а при указании бинарной -- как wchar.
                У меня же на экран нифига русского не попадает.
                  А вообще вопрос был очень простой -- как же все-таки прочитать файл в Unicode стандартными средсвами (и преобразовать его скажем в 1251). Просто привести кусочек кода. Больше ничего не надо. Я и так догадываюсь, что у меня что-то неправильно написано.
                    А после чтения ты буффер смотрел? с файлом сравнивал?
                    Скорее всего трабла в выводе на экран Копай там - выводиш какими методами?
                      migel, ну чего ты спрашиваешь как я делаю?
                      напиши как надо делать и боле ничего.
                      как я выводил, я привел пример, смотри выше.
                      кстати, посмотрел, вообще ничего читать не хочет - NULL возвращает fgetws :(
                        вдогонку - про fgetws я лажу написал.
                        читает она, но в буфер гонит пургу.
                          Чудак человек, какой код я тебе приведу, если такой же у меня работает правильно Ж-(
                          И не надо нарываться на грубости
                          что в буфер не совпадает с файлом?
                            Чтение из файла не при чем -все читается нормально.
                            А для операционки тебе просто нужно установить локаль вывода консольного окна.
                            setlocale(LC_ALL, "rus_rus.OCP");
                            Если не поможет то поиграйся кодовыми страничками.
                              Вроде старался не грубить. :(
                              Если что не так -- сорри.
                              К делу, два варианта поведения:
                              1. in = _wfopen(L"aaa.txt", L"rb");
                              Выцепилось следующее - fgetws читает строку из файла, пока не встретит любой русский символ, отсекает начиная с него весь остаток строки.
                              2. in = _wfopen(L"aaa.txt", L"rt");
                              fgetws читает строку из файла как набор char, преобразует их в wchar_t, в результате - полная галиматья.
                              Интересно было бы разобраться именно с первым случаем, он, мне кажется ближе к истине.
                              Кстати преобразовать в char* чем надо? wcstombs? или это другая музыка?
                              И последнее - в самом начале файла 0xFEFF -- это признак того, что файл в Unicode? или это какая-то левятина затесалась?
                                Значит дело такое:
                                юникодный файл в кодировке 1251 читается на ура - именно в бинарной моде.
                                Второе
                                именно так, но надо ставить нужную локаль.
                                wcstombs(strTmp, (const wchar_t *) tstr, sizeof(strTmp));
                                Третье скорее всего да - но я не уверен
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0340 ]   [ 17 queries used ]   [ Generated: 16.04.24, 22:23 GMT ]