Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.143.9.115] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Подскажите пожалуйста!
Как вывести в окно Unicode файл в Visual C++ 6? Заранее благодарен Алексей |
Сообщ.
#2
,
|
|
|
WideCharToMultibyte() и MultibyteToWideChar()
|
Сообщ.
#3
,
|
|
|
Присоединюсь к вопросу.
До конверсии дело не доходит еще. Уже при чтении Unicod-овского файла у меня лажа получается. Как бы мне помочь? |
Сообщ.
#4
,
|
|
|
А в чем трабла то?
чем файл читаем в какой буффер на чем зависаем? |
Сообщ.
#5
,
|
|
|
Да вот так:
#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. |
Сообщ.
#6
,
|
|
|
Пропадает куда?
нет в буффере или при выводе буффера ничего не кажет? Вообще в двоичной моде никаких преобразований функции чтения не делают. |
Сообщ.
#7
,
|
|
|
Где-то в комментариях к этим функциям (казись MSN лопатил) есть коментарий к этим функциям, так там указано, что при указании текст-моды чтение производится как multybyte,
а при указании бинарной -- как wchar. У меня же на экран нифига русского не попадает. |
Сообщ.
#8
,
|
|
|
А вообще вопрос был очень простой -- как же все-таки прочитать файл в Unicode стандартными средсвами (и преобразовать его скажем в 1251). Просто привести кусочек кода. Больше ничего не надо. Я и так догадываюсь, что у меня что-то неправильно написано.
|
Сообщ.
#9
,
|
|
|
А после чтения ты буффер смотрел? с файлом сравнивал?
Скорее всего трабла в выводе на экран Копай там - выводиш какими методами? |
Сообщ.
#10
,
|
|
|
migel, ну чего ты спрашиваешь как я делаю?
напиши как надо делать и боле ничего. как я выводил, я привел пример, смотри выше. кстати, посмотрел, вообще ничего читать не хочет - NULL возвращает fgetws |
Сообщ.
#11
,
|
|
|
вдогонку - про fgetws я лажу написал.
читает она, но в буфер гонит пургу. |
Сообщ.
#12
,
|
|
|
Чудак человек, какой код я тебе приведу, если такой же у меня работает правильно Ж-(
И не надо нарываться на грубости что в буфер не совпадает с файлом? |
Сообщ.
#13
,
|
|
|
Чтение из файла не при чем -все читается нормально.
А для операционки тебе просто нужно установить локаль вывода консольного окна. setlocale(LC_ALL, "rus_rus.OCP"); Если не поможет то поиграйся кодовыми страничками. |
Сообщ.
#14
,
|
|
|
Вроде старался не грубить.
Если что не так -- сорри. К делу, два варианта поведения: 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? или это какая-то левятина затесалась? |
Сообщ.
#15
,
|
|
|
Значит дело такое:
юникодный файл в кодировке 1251 читается на ура - именно в бинарной моде. Второе именно так, но надо ставить нужную локаль. wcstombs(strTmp, (const wchar_t *) tstr, sizeof(strTmp)); Третье скорее всего да - но я не уверен |