Здравствуйте DarkGray, Вы писали:
DG>Здравствуйте Grigory, Вы писали:
G>>Кто-нибудь работал с юникодными файлами, используя STL? Как это сделать?
DG>Вместо ifstream, ofstream, fstream используешь wifstream, wofstream, wfstream.
DG>Строки читаешь в wstring.
DG>А все остальное также, как и с обычными файлами.
Но вот только имена файлов придется всё равно задавать в ANSI
Здравствуйте DarkGray, Вы писали:
DG>Здравствуйте Grigory, Вы писали:
G>>Кто-нибудь работал с юникодными файлами, используя STL? Как это сделать?
DG>Вместо ifstream, ofstream, fstream используешь wifstream, wofstream, wfstream.
DG>Строки читаешь в wstring.
DG>А все остальное также, как и с обычными файлами.
Здравствуйте Vodka, Вы писали:
V>Здравствуйте DarkGray, Вы писали:
G>>>Кто-нибудь работал с юникодными файлами, используя STL? Как это сделать?
DG>>Вместо ifstream, ofstream, fstream используешь wifstream, wofstream, wfstream.
DG>>Строки читаешь в wstring.
DG>>А все остальное также, как и с обычными файлами.
V>Но вот только имена файлов придется всё равно задавать в ANSI
Ты хочешь сказать, что тебе удалось писать в файл и он был не ANSI? Кинь, плиз, кусок кода.
Здравствуйте DarkGray, Вы писали:
G>>Ты хочешь сказать, что тебе удалось писать в файл и он был не ANSI? Кинь, плиз, кусок кода.
DG>На VC6 я писал так, лень было разбираться, но я думал это проблема только VC6...
И 6 и .NET, и, возможно, STL.
DG>
G>>Меня это устраивало до момента подключения сторонней библиотеки, хотящей поток.
DG>Дык, отдай ей свой поток, который эты извраты скрывает в себе.
DG>P.S. Хотя лучше, конечно, найти нормальный класс-поток, поддерживающий unicode.
Она работает через istreambuf_iterator/ostreambuf_iterator, так что, боюсь, придётся переписывать basic_streambuf.
Re[3]: STL & unicode files
От:
Аноним
Дата:
08.05.03 11:41
Оценка:
Здравствуйте, Vodka, Вы писали:
G>>Кто-нибудь работал с юникодными файлами, используя STL? Как это сделать?
DG>Вместо ifstream, ofstream, fstream используешь wifstream, wofstream, wfstream.
DG>А все остальное также, как и с обычными файлами.
V>Но вот только имена файлов придется всё равно задавать в ANSI
Здравствуйте, , Вы писали:
DG>> Вместо ifstream, ofstream, fstream используешь wifstream, DG>> wofstream, wfstream.
V>> Но вот только имена файлов придется всё равно задавать в ANSI
> По-прежнему имена файлов в ANSI писать надо?
Да. До сих пор никто не может придумать удачную схему преобразования
"широких" имен файлов в "узкие" для систем, не поддерживающих открытие
файлов через "широкие" имена. В частности, там масса нюансов, касающихся
того, какую кодировку для этого использовать и т.п.
Posted via RSDN NNTP Server 1.5 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, DarkGray, Вы писали:
DG>Вместо ifstream, ofstream, fstream используешь wifstream, wofstream, wfstream. DG>Строки читаешь в wstring. DG>А все остальное также, как и с обычными файлами.
Действительно не работает. Удивительно, что никто не знает решения...
Я чуть-чуть поизучал проблему. Такое поведение видимо связано с локалью.
Вроде даже есть класс, который отвечает за преобразование используемых
в программе символов в символы, используемые за ее пределами (в нашем случае
файл) — codecvt. Попробовал решить проблему наскоком — подменять локаль
wfstream потока на локаль, содержащую codecvt<wchar_t, wchar_t, wchar_t>.
Не помогло. Может кто из знающих прольет немного света на проблему...?
Может кто подскажет имеет ли отношение codecvt к проблеме...?
Здравствуйте, Topi_Nambur, Вы писали:
T_N>Здравствуйте, Grigory, Вы писали:
T_N>Действительно не работает. Удивительно, что никто не знает решения... T_N>Я чуть-чуть поизучал проблему. Такое поведение видимо связано с локалью. T_N>Вроде даже есть класс, который отвечает за преобразование используемых T_N>в программе символов в символы, используемые за ее пределами (в нашем случае T_N>файл) — codecvt. Попробовал решить проблему наскоком — подменять локаль T_N>wfstream потока на локаль, содержащую codecvt<wchar_t, wchar_t, wchar_t>. T_N>Не помогло. Может кто из знающих прольет немного света на проблему...? T_N>Может кто подскажет имеет ли отношение codecvt к проблеме...?
According to the standard, "A File provides an external source/sink
stream whose underlaid character type is char (byte)." This is true
even for wide character streams; the extra characters are represented
as multibyte sequences, say in UTF-8.
(While I'm at it, I might also remind that the standard doesn't
guarantee, or even recommend, Unicode for wchar_t, nor does it
guarantee that a wchar_t is large enough to hold a Unicode character.
Since you speak of Windows NT, however, I don't think that this is a
problem in your case.)
ME>According to the standard, "A File provides an external source/sink
ME>stream whose underlaid character type is char (byte)." This is true
ME>even for wide character streams; the extra characters are represented
ME>as multibyte sequences, say in UTF-8.
ME>(While I'm at it, I might also remind that the standard doesn't
ME>guarantee, or even recommend, Unicode for wchar_t, nor does it
ME>guarantee that a wchar_t is large enough to hold a Unicode character.
ME>Since you speak of Windows NT, however, I don't think that this is a
ME>problem in your case.)
Т.е. объяснили, что wfstream ведет себя правильно.
Только зачем он нужен такой wfstream
Простого же хочется: писать wchar_t символы без изменения в файл...
ME>>According to the standard, "A File provides an external source/sink
ME>>stream whose underlaid character type is char (byte)." This is true
ME>>even for wide character streams; the extra characters are represented
ME>>as multibyte sequences, say in UTF-8.
ME>>(While I'm at it, I might also remind that the standard doesn't
ME>>guarantee, or even recommend, Unicode for wchar_t, nor does it
ME>>guarantee that a wchar_t is large enough to hold a Unicode character.
ME>>Since you speak of Windows NT, however, I don't think that this is a
ME>>problem in your case.)
T_N>Т.е. объяснили, что wfstream ведет себя правильно. T_N>Только зачем он нужен такой wfstream T_N>Простого же хочется: писать wchar_t символы без изменения в файл...
Видимо, rationale такой: wstream позволяет читать/писать wchar_t символы, а как они уже будут физически храниться — тебя это не должно волновать
Я, по-моемому, где-то видел, как решается твоя задача, но не могу вспомнить... Надо порыть в comp.lang.c++.moderated
G>>>Кто-нибудь работал с юникодными файлами, используя STL? Как это сделать?
_>>Вот статья о том, как это сделать: _>>http://www.codeproject.com/vcpp/stl/upgradingstlappstounicode.asp
ME>Еще в апрельском и майском 1999 CUJ были две крутейшие статьи P.J.Plauger'a. Только вот в on-line бы их найти...
Здраствуйте, MaximE. Вы писали:
G>>> Кто-нибудь работал с юникодными файлами, используя STL? Как это G>>> сделать? M> M> _>Вот статья о том, как это сделать: M> _>http://www.codeproject.com/vcpp/stl/upgradingstlappstounicode.asp M> M> Еще в апрельском и майском 1999 CUJ были две крутейшие статьи M> P.J.Plauger'a. Только вот в on-line бы их найти...
Standard C/C++: Unicode Files и Standard C/C++: Multibyte Files ?
Зачем искать, они есть на CUJ CD-ROM
Здравствуйте, PM, Вы писали:
PM>Здраствуйте, MaximE. Вы писали:
G>>>> Кто-нибудь работал с юникодными файлами, используя STL? Как это G>>>> сделать? M>> M>> _>Вот статья о том, как это сделать: M>> _>http://www.codeproject.com/vcpp/stl/upgradingstlappstounicode.asp M>> M>> Еще в апрельском и майском 1999 CUJ были две крутейшие статьи M>> P.J.Plauger'a. Только вот в on-line бы их найти...
PM>Standard C/C++: Unicode Files и Standard C/C++: Multibyte Files ? PM>Зачем искать, они есть на CUJ CD-ROM
PM>ps. спасибо за наводку — почитаю на досуге
Ой, а где ты такой CD взял? Может там еще есть...?
Здравствуйте, PM, Вы писали:
PM>Standard C/C++: Unicode Files и Standard C/C++: Multibyte Files ? PM>Зачем искать, они есть на CUJ CD-ROM
PM>ps. спасибо за наводку — почитаю на досуге
Здраствуйте, MaximE. Вы писали:
M> Поделился бы с общественностью
Спасибо Игорю Вартанову — он подкинул мне 1.5 гига книжек, а среди них и CUJ CD-ROM release 4 (все номера за 1990-2000 гг.)
[offtop]
Поделиться будет непросто — в раре оно занимает 67,8 MB. Могу выложить на ночь, не дольше — канал тощий
На резусе есть архив release 6 но я не смог его распаковать
[/offtop]
Здравствуйте, Grigory, Вы писали:
G>Не, рабята, вы не поняли. Это не работает. Кто-нибудь _реально_ читал из/писал в юникодные файлы с использованием STL?
Я писал, пишу и буду писать, только пользую свой basic_streambuf<>