B>endl кроме перевода строки еще и буфер опорожняет.
Так тоже не работает. Может у меня винда битая? Винда не переставлялась лет пять, но у нас довольно сильный IT отдел и в винде стоят все апдейты по самое немогу. Может какой-то апдейт отрубил wcout? Кроме этого в винде вроде все работает и даже не особенно часто она виснет. Было у кого-то что-то подобное?
Здравствуйте, catBasilio, Вы писали:
B>endl кроме перевода строки еще и буфер опорожняет.
Разве в деструкторе не должен быть сброс буфера? По-моему, должен.
Здравствуйте, Аноним, Вы писали: А>Этот код компилится, линкуется, выполняется, но ничего не печатает :-(.
wcout.imbue(std::locale("rus_rus.866"));
"Дайте мне возможность выпускать и контролировать деньги в государстве и – мне нет дела до того, кто пишет его законы." (c) Мейер Ансельм Ротшильд , банкир.
"Дайте мне возможность выпускать и контролировать деньги в государстве и – мне нет дела до того, кто пишет его законы." (c) Мейер Ансельм Ротшильд , банкир.
А>Этот код компилится, линкуется, выполняется, но ничего не печатает .
А>Вопрос:
А>1. Как вывести хотя бы английское сообщение в Юникоде в стандартный поток в Win2000?
А>Спасибо
А что шестерка держит юникод?
Здравствуйте, pepsicoca, Вы писали:
P>Так тоже не работает. Может у меня винда битая? Винда не переставлялась лет пять, но у нас довольно сильный IT отдел и в винде стоят все апдейты по самое немогу. Может какой-то апдейт отрубил wcout?
Если действительно хочешь чему-то научиться, то как минимум на год выкинь из головы даже мысль о том, что в твоих проблемах виноват кто-то, кроме тебя. Я серьезно говорю.
pepsicoca пишет:
> B>std::wcout<<L"hello\n\r" << *std::endl*; > B> > > > > B>endl кроме перевода строки еще и буфер опорожняет. > > Так тоже не работает. Может у меня винда битая? Винда не переставлялась
По выходу из приложения удаляется объект std::wcout, вызывается
его деструктор, закрывается поток, и буфера опорожняются.
Так что тут std::endl или flush звать не обязательно,
ничего не изменится.
А>Этот код компилится, линкуется, выполняется, но ничего не печатает .
А>Вопрос:
А>1. Как вывести хотя бы английское сообщение в Юникоде в стандартный поток в Win2000?
А>Спасибо
Попробовал тот же самый код под WinXP на том же самом BCB60. Тот же самый эффект — Юникод не печатает. Приложение создается как виндовское консольное. Может надо что-то включить в консоли?
P>Попробовал тот же самый код под WinXP на том же самом BCB60. Тот же самый эффект — Юникод не печатает. Приложение создается как виндовское консольное. Может надо что-то включить в консоли?
Значит BCB у тебя такой хороший! У меня вот MS VC++ 9.0 прекрасно всё делает!
"Дайте мне возможность выпускать и контролировать деньги в государстве и – мне нет дела до того, кто пишет его законы." (c) Мейер Ансельм Ротшильд , банкир.
Здравствуйте, Rakafon, Вы писали:
P>>Попробовал тот же самый код под WinXP на том же самом BCB60. Тот же самый эффект — Юникод не печатает. Приложение создается как виндовское консольное. Может надо что-то включить в консоли?
R>Значит BCB у тебя такой хороший! У меня вот MS VC++ 9.0 прекрасно всё делает! R>
Действительно, в MSVC этот код работает. Хотя у меня старая студия — 2003 года.
Здравствуйте, pepsicoca, Вы писали:
P>Действительно, в MSVC этот код работает. Хотя у меня старая студия — 2003 года.
Я нашёл для себя только один надёжный способ писать напрямую UCS-2 — через WriteConsoleW
Сейчас точно не вспомню, но там был какой-то кретинский прикол с преобразованием внутри потоков всех кодировок к текущей локали, независимо от того, в какой мы работаем. Как-то связано с полнейшей неюникодностью CRT.
Здравствуйте, Мишень-сан, Вы писали:
МС>Я нашёл для себя только один надёжный способ писать напрямую UCS-2 — через WriteConsoleW
МС>Сейчас точно не вспомню, но там был какой-то кретинский прикол с преобразованием внутри потоков всех кодировок к текущей локали, независимо от того, в какой мы работаем. Как-то связано с полнейшей неюникодностью CRT.
Действительно, в BCB60 WriteConsoleW работает. И без всякого предварительного imbue.
Здравствуйте, pepsicoca, Вы писали: P>Действительно, в BCB60 WriteConsoleW работает. И без всякого предварительного imbue.
Действительно! А почему бы этому "мегарешению" не заработать без imbue? Ведь imbue — это метод задания локального контекста потоковым класса С++,а в случае cout/wcout — задания локали стандартному потоку вывода С++ (который, как вы наверное знаете, может быть перенаправлен из консоли в файл например, + работа с stdout и stdin — это переносимо не только между Windows98 и WindowsXP, но и между другими платформами); вы же работаете с хэндлом консольного окна, т.е. напрямую пишете в буфер консольного окна и никакого отношения к работе со стандартными потоками С++ это не имеет, следовательно вообще вопрос не по С++, а по WinAPI!
P.S.: ... пишу в консоль, используя хэндл консольного окна:
"Дайте мне возможность выпускать и контролировать деньги в государстве и – мне нет дела до того, кто пишет его законы." (c) Мейер Ансельм Ротшильд , банкир.
Здравствуйте, Rakafon, Вы писали:
R>Здравствуйте, pepsicoca, Вы писали: P>>Действительно, в BCB60 WriteConsoleW работает. И без всякого предварительного imbue.
R>Действительно! А почему бы этому "мегарешению" не заработать без imbue? Ведь imbue — это метод задания локального контекста потоковым класса С++,а в случае cout/wcout — задания локали стандартному потоку вывода С++ (который, как вы наверное знаете, может быть перенаправлен из консоли в файл например, + работа с stdout и stdin — это переносимо не только между Windows98 и WindowsXP, но и между другими платформами); вы же работаете с хэндлом консольного окна, т.е. напрямую пишете в буфер консольного окна и никакого отношения к работе со стандартными потоками С++ это не имеет, следовательно вообще вопрос не по С++, а по WinAPI!
R>P.S.: ... пишу в консоль, используя хэндл консольного окна:
R>
Вот это мне как раз и непонятно. На то и Юникод, чтобы забыть о переключении таблиц символов. Если есть Юникодная строка, зачем мне указывать локаль для потока? Код Юникодного символа ОДНОЗНАЧНО определяет его начертание и принадлежность к тому или иному алфавиту. Зачем еще указывать локаль? Если текущий код это китайский иероглиф — пусть система напечатает китайский иероглиф. Если текущий код это греческая буква "кси" — пусть система напечатает греческую букву "кси". При чем тут локаль — совершенно непонятно.