чтение файла в dos кодировке
От: Аноним  
Дата: 03.08.03 13:46
Оценка:
Не могу прочитать русский текст в dos кодировке. Все уже облазил... везде написано, что нужно установить локаль и все будет классно, но не получается... Помогите, пожалуйста.


  std::ifstream * pLogFile = new std::ifstream;
  std::locale loc(".866");
  pLogFile->imbue( loc );
  pLogFile->open( sFilePath.c_str());

  if(pLogFile->is_open())
  {
    char c[5];
    pLogFile->read(c, 5);
    pLogFile->close();
  }
  delete pLogFile;
Re: чтение файла в dos кодировке
От: alexandrov_alex США  
Дата: 04.08.03 06:32
Оценка:
Извини, не занимался твоей проблемой конкретно, но что-то здесь у тебя не так. Ну установишь ты локаль в 866 страницу, а дальше что? Как система поймет, что ты хочешь из 866 в 1251 данные перевести??? setlocale подходит лишь для унарных локалзависимых операций. Здесь тебе нужен всего лишь OemToChar.
Posted via RSDN NNTP Server 1.7 beta
It's kind of fun to do the impossible (Walt Disney)
Re: чтение файла в dos кодировке
От: Shroo  
Дата: 04.08.03 09:12
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Не могу прочитать русский текст в dos кодировке. Все уже облазил... везде написано, что нужно установить локаль и все будет классно, но не получается... Помогите, пожалуйста.


А>

А>  std::ifstream * pLogFile = new std::ifstream;
А>  std::locale loc(".866");
А>  pLogFile->imbue( loc );
А>  pLogFile->open( sFilePath.c_str());

А>  if(pLogFile->is_open())
А>  {
А>    char c[5];
А>    pLogFile->read(c, 5);
А>    pLogFile->close();
А>  }
А>  delete pLogFile;

А>


Используй wifstream и все будет ок... Читай точно так же, только из wifstream. Потом перекодируешь c помощью WideCharToMultiByte. И будет читать dos как миленькая.. ))
Re: чтение файла в dos кодировке
От: matador Россия  
Дата: 04.08.03 09:16
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Не могу прочитать русский текст в dos кодировке. Все уже облазил... везде написано, что нужно установить локаль и все будет классно, но не получается... Помогите, пожалуйста.


просто читаешь по символьно и по таблице ASCII делаешь смещение кода символа. будь внимателен в таблице разное смещение для прописных и строчных букв.

примерный код такой:

void printWORD(char *g)
{
    int i,n;
    n=strlen(g);
    for(i=0; i<n;i++)
    { if(g[i]!=' ')    g[i]=g[i]+192;
    }
    printf("\n%s\n",g);
}


это если все буквы БОЛЬШИЕ, для строчных добавь проверку на принадлежность интервалу и прибавляй свое смещение (по-моему 64).
... << RSDN@Home 1.1 beta 1 >>
добрый дядька матадор
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.