Re: STL & unicode files
От: plads_project  
Дата: 28.08.03 08:46
Оценка: 10 (2)
G>Кто-нибудь работал с юникодными файлами, используя STL? Как это сделать?

Вот статья о том, как это сделать:
http://www.codeproject.com/vcpp/stl/upgradingstlappstounicode.asp
Re[2]: STL & unicode files
От: MaximE Великобритания  
Дата: 28.08.03 09:22
Оценка: 4 (1)
Здравствуйте, plads_project, Вы писали:

G>>Кто-нибудь работал с юникодными файлами, используя STL? Как это сделать?


_>Вот статья о том, как это сделать:

_>http://www.codeproject.com/vcpp/stl/upgradingstlappstounicode.asp

Еще в апрельском и майском 1999 CUJ были две крутейшие статьи P.J.Plauger'a. Только вот в on-line бы их найти...
STL & unicode files
От: Grigory Россия  
Дата: 30.06.02 14:16
Оценка:
Hello, All.

Кто-нибудь работал с юникодными файлами, используя STL? Как это сделать?
Re: STL & unicode files
От: Алекс Россия http://wise-orm.com
Дата: 01.07.02 03:56
Оценка:
Здравствуйте Grigory, Вы писали:

G>Hello, All.


G>Кто-нибудь работал с юникодными файлами, используя STL? Как это сделать?


Посмотри wfstream.
Re: STL & unicode files
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 01.07.02 04:19
Оценка:
Здравствуйте Grigory, Вы писали:

G>Кто-нибудь работал с юникодными файлами, используя STL? Как это сделать?


Вместо ifstream, ofstream, fstream используешь wifstream, wofstream, wfstream.

Строки читаешь в wstring.

А все остальное также, как и с обычными файлами.



int main()
{
  std::wifstream ifs ("input.txt");
  int i = 0;
  ifs >> i;
  std::wstring s;
  ifs >> w;
  std::wstring line;
  std::getline (ifs, line);  
}
Re[2]: STL & unicode files
От: Vodka  
Дата: 01.07.02 06:31
Оценка:
Здравствуйте DarkGray, Вы писали:

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


G>>Кто-нибудь работал с юникодными файлами, используя STL? Как это сделать?


DG>Вместо ifstream, ofstream, fstream используешь wifstream, wofstream, wfstream.


DG>Строки читаешь в wstring.


DG>А все остальное также, как и с обычными файлами.


Но вот только имена файлов придется всё равно задавать в ANSI
Re[2]: STL & unicode files
От: Grigory Россия  
Дата: 01.07.02 08:01
Оценка:
Здравствуйте DarkGray, Вы писали:

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


G>>Кто-нибудь работал с юникодными файлами, используя STL? Как это сделать?


DG>Вместо ifstream, ofstream, fstream используешь wifstream, wofstream, wfstream.


DG>Строки читаешь в wstring.


DG>А все остальное также, как и с обычными файлами.



DG>

DG>int main()
DG>{
DG>  std::wifstream ifs ("input.txt");
DG>  int i = 0;
DG>  ifs >> i;
DG>  std::wstring s;
DG>  ifs >> w;
DG>  std::wstring line;
DG>  std::getline (ifs, line);  
DG>}
DG>


Не, рабята, вы не поняли. Это не работает. Кто-нибудь _реально_ читал из/писал в юникодные файлы с использованием STL?
Re[3]: STL & unicode files
От: Grigory Россия  
Дата: 01.07.02 08:03
Оценка:
Здравствуйте Vodka, Вы писали:

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


G>>>Кто-нибудь работал с юникодными файлами, используя STL? Как это сделать?


DG>>Вместо ifstream, ofstream, fstream используешь wifstream, wofstream, wfstream.


DG>>Строки читаешь в wstring.


DG>>А все остальное также, как и с обычными файлами.


V>Но вот только имена файлов придется всё равно задавать в ANSI


Ты хочешь сказать, что тебе удалось писать в файл и он был не ANSI? Кинь, плиз, кусок кода.
Re[4]: STL & unicode files
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 01.07.02 08:43
Оценка:
Здравствуйте Grigory, Вы писали:

G>Ты хочешь сказать, что тебе удалось писать в файл и он был не ANSI? Кинь, плиз, кусок кода.


На VC6 я писал так, лень было разбираться, но я думал это проблема только VC6...

#include <fstream>
#include <sstream>

void main()
{
  std::wstringstream wss;
  wss << L"Мой текст" << L"\r";
  wss << L"My text" << L"\r";
  wss << 45 << L"\r";
  std::ofstream ofs2 ("unicode.2.txt");
  ofs2.write ((char*)wss.str().c_str(), wss.str().size() * 2);
}
Re[5]: STL & unicode files
От: Grigory Россия  
Дата: 01.07.02 09:09
Оценка:
Здравствуйте DarkGray, Вы писали:

G>>Ты хочешь сказать, что тебе удалось писать в файл и он был не ANSI? Кинь, плиз, кусок кода.


DG>На VC6 я писал так, лень было разбираться, но я думал это проблема только VC6...

И 6 и .NET, и, возможно, STL.

DG>
DG>#include <fstream>
DG>#include <sstream>

DG>void main()
DG>{
DG>  std::wstringstream wss;
DG>  wss << L"Мой текст" << L"\r";
DG>  wss << L"My text" << L"\r";
DG>  wss << 45 << L"\r";
DG>  std::ofstream ofs2 ("unicode.2.txt");
DG>  ofs2.write ((char*)wss.str().c_str(), wss.str().size() * 2);
DG>}
DG>

Меня это устраивало до момента подключения сторонней библиотеки, хотящей поток.
Re[6]: STL & unicode files
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 01.07.02 09:16
Оценка:
Здравствуйте Grigory, Вы писали:

G>Меня это устраивало до момента подключения сторонней библиотеки, хотящей поток.


Дык, отдай ей свой поток, который эты извраты скрывает в себе.

P.S. Хотя лучше, конечно, найти нормальный класс-поток, поддерживающий unicode.
Re[7]: STL & unicode files
От: Grigory Россия  
Дата: 01.07.02 09:31
Оценка:
Здравствуйте DarkGray, Вы писали:


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


А как сейчас, ничего нового не придумали?

По-прежнему имена файлов в ANSI писать надо?
Re[4]: STL & unicode files
От: Павел Кузнецов  
Дата: 08.05.03 12:55
Оценка:
Здравствуйте, , Вы писали:

DG>> Вместо ifstream, ofstream, fstream используешь wifstream,

DG>> wofstream, wfstream.

V>> Но вот только имена файлов придется всё равно задавать в ANSI


> По-прежнему имена файлов в ANSI писать надо?


Да. До сих пор никто не может придумать удачную схему преобразования
"широких" имен файлов в "узкие" для систем, не поддерживающих открытие
файлов через "широкие" имена. В частности, там масса нюансов, касающихся
того, какую кодировку для этого использовать и т.п.
Posted via RSDN NNTP Server 1.5 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[2]: STL & unicode files
От: Schade Россия  
Дата: 20.06.03 23:27
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>Вместо ifstream, ofstream, fstream используешь wifstream, wofstream, wfstream.

DG>Строки читаешь в wstring.
DG>А все остальное также, как и с обычными файлами.

Почему-то у меня такой код:
wifstream stm("input.txt");
wstring ws;
while(getline(stm, ws), !ws.empty())
    wcout << ws << L"\n\r";

работает только тогда, когда input.txt сохранен как ANSI.
А если Unicode — каждый wchar_t в строке превращается в 2 wchar_t
Что с этим делать —
... << RSDN@Home 1.0 beta 7 >>
Re[3]: STL & unicode files
От: Topi_Nambur  
Дата: 28.08.03 05:03
Оценка:
Здравствуйте, Grigory, Вы писали:

Действительно не работает. Удивительно, что никто не знает решения...
Я чуть-чуть поизучал проблему. Такое поведение видимо связано с локалью.
Вроде даже есть класс, который отвечает за преобразование используемых
в программе символов в символы, используемые за ее пределами (в нашем случае
файл) — codecvt. Попробовал решить проблему наскоком — подменять локаль
wfstream потока на локаль, содержащую codecvt<wchar_t, wchar_t, wchar_t>.
Не помогло. Может кто из знающих прольет немного света на проблему...?
Может кто подскажет имеет ли отношение codecvt к проблеме...?
Re[4]: STL & unicode files
От: MaximE Великобритания  
Дата: 28.08.03 05:17
Оценка:
Здравствуйте, 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 к проблеме...?

Решение, конечно, должно быть.

Можешь полистать http://groups.google.com/groups?hl=en&amp;lr=&amp;ie=UTF-8&amp;oe=UTF-8&amp;safe=off&amp;q=unicode+stream&amp;meta=group%3Dcomp.lang.c%252B%252B.moderated

Из одного из тредов:

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.)

Re[5]: STL & unicode files
От: Topi_Nambur  
Дата: 28.08.03 06:27
Оценка:
Здравствуйте, MaximE, Вы писали:

ME>Решение, конечно, должно быть.


ME>Можешь полистать http://groups.google.com/groups?hl=en&amp;lr=&amp;ie=UTF-8&amp;oe=UTF-8&amp;safe=off&amp;q=unicode+stream&amp;meta=group%3Dcomp.lang.c%252B%252B.moderated


ME>Из одного из тредов:

ME>

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 символы без изменения в файл...
Re[6]: STL & unicode files
От: MaximE Великобритания  
Дата: 28.08.03 07:41
Оценка:
Здравствуйте, Topi_Nambur, Вы писали:

[]

ME>>Из одного из тредов:

ME>>

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
Re[3]: STL & unicode files
От: plads_project  
Дата: 28.08.03 09:45
Оценка:
G>>>Кто-нибудь работал с юникодными файлами, используя STL? Как это сделать?

_>>Вот статья о том, как это сделать:

_>>http://www.codeproject.com/vcpp/stl/upgradingstlappstounicode.asp

ME>Еще в апрельском и майском 1999 CUJ были две крутейшие статьи P.J.Plauger'a. Только вот в on-line бы их найти...


Ага. Вот небольшой кусок (эта ссылка инкапсулирована в мою первую ссылку):
http://groups.google.com/groups?hl=en&amp;lr=&amp;ie=UTF-8&amp;oe=UTF-8&amp;selm=7cqqst%24p64%40bgtnsc03.worldnet.att.net
Re[3]: STL & unicode files
От: PM  
Дата: 28.08.03 10:36
Оценка:
Здраствуйте, 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

ps. спасибо за наводку — почитаю на досуге
Posted via RSDN NNTP Server 1.7 beta
Re[2]: STL & unicode files
От: Topi_Nambur  
Дата: 28.08.03 11:49
Оценка:
Здравствуйте, plads_project, Вы писали:

G>>Кто-нибудь работал с юникодными файлами, используя STL? Как это сделать?


_>Вот статья о том, как это сделать:

_>http://www.codeproject.com/vcpp/stl/upgradingstlappstounicode.asp

То, что надо! Большое спасибо!
Re[4]: STL & unicode files
От: Topi_Nambur  
Дата: 28.08.03 11:51
Оценка:
Здравствуйте, 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 взял? Может там еще есть...?
Re[4]: STL & unicode files
От: MaximE Великобритания  
Дата: 28.08.03 12:03
Оценка:
Здравствуйте, PM, Вы писали:

PM>Standard C/C++: Unicode Files и Standard C/C++: Multibyte Files ?

PM>Зачем искать, они есть на CUJ CD-ROM

PM>ps. спасибо за наводку — почитаю на досуге


Поделился бы с общественностью
Re[5]: STL & unicode files
От: PM  
Дата: 28.08.03 12:36
Оценка:
Здраствуйте, MaximE. Вы писали:

M> Поделился бы с общественностью


Спасибо Игорю Вартанову — он подкинул мне 1.5 гига книжек, а среди них и CUJ CD-ROM release 4 (все номера за 1990-2000 гг.)
[offtop]
Поделиться будет непросто — в раре оно занимает 67,8 MB. Могу выложить на ночь, не дольше — канал тощий
На резусе есть архив release 6 но я не смог его распаковать
[/offtop]
Posted via RSDN NNTP Server 1.7 beta
Re[3]: STL & unicode files
От: MaximE Великобритания  
Дата: 28.08.03 21:25
Оценка:
Здравствуйте, Grigory, Вы писали:

G>Не, рабята, вы не поняли. Это не работает. Кто-нибудь _реально_ читал из/писал в юникодные файлы с использованием STL?


Я писал, пишу и буду писать, только пользую свой basic_streambuf<>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.