powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
39 сообщений из 39, показаны все 2 страниц
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38059346
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени.

Нужно выводить в консоль строки utf-8. Выводятся или иероглифы или прямоугольники. Кто-нибудь решал такую задачу?

SetConsoleCP(CP_UTF8),
SetConsoleOutputCP(CP_UTF8),
system("chcp 65001")

пробовал.
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38059399
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sherzod_Доброго времени.

Нужно выводить в консоль строки utf-8. Выводятся или иероглифы или прямоугольники. Кто-нибудь решал такую задачу?

SetConsoleCP(CP_UTF8),
SetConsoleOutputCP(CP_UTF8),
system("chcp 65001")

пробовал.Setlocale пробовал?
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38059477
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Katamaran1987,

setlocale(LC_ALL, "Russian");
setlocale(LC_ALL, "ru_RU.UTF-8");
setlocale(LC_ALL, "");

пробовал. Еще пробовал

#pragma execution_character_set("utf-8")
// такой прагмы в 2012 вообще нет

_setmode(_fileno(stdout), _O_U8TEXT);
// В 2012 натыкается на ассерт

д-я студия, в linux о таких вещах даже и не задумываешься.
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38059776
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sherzod_Выводятся или иероглифы или прямоугольники.
А консольный шрифт у тебя юникодный?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38059819
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Да. Аналогичный код скомпилированный gcc, в той же консоли работает почти нормально. В самом начале только выводятся два символа видимо в связи с попыткой консоли вывести BOM и надо еще переключать консоль в режим chcp 65001.
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38059927
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovsherzod_Выводятся или иероглифы или прямоугольники.
А консольный шрифт у тебя юникодный?..


Он должен быть не только юникодным, а конкретно поддерживать кодировку UTF-8.

На самом деле в винде поддержки UTF-8 нет, на сколько я знаю, ни один шрифт не поддерживает UTF-8,
и нет кодовой страницы для UTF-8.
(могу ошибаться)
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38059972
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv(могу ошибаться)
И ошибаешься. Причём по всем пунктам.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38060172
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMasterZiv(могу ошибаться)
И ошибаешься. Причём по всем пунктам.

Здесь пишут что нужно использовать Lucida Console.

А почему "по всем" пунктам?
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38060183
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА почему "по всем" пунктам?
Э-э-э... Ты можешь назвать в чём MasterZiv прав? Я - нет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38060230
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господин, с профилем Delphi разработчика.

Давайте вместе с вами откроем хоть какой-то р есурс
где описан фонт и из чего он состоит. Ну хотя-бы тут.

http://msdn.microsoft.com/en-us/library/windows/desktop/dd145037%28v=vs.85%29.aspx

И почитаем где там и чего указано про utf-8.

По сабжу, если правы то и я не буду возражать.
Но давайте-ж в техническом русле... Как-то так вобщем.

C уважением,
mayton
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38060288
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДавайте вместе с вами откроем хоть какой-то ресурсгде описан фонт и из чего
он состоит. Ну хотя-бы тут.

http://msdn.microsoft.com/en-us/library/windows/desktop/dd145037%28v=vs.85%29.aspx

И почитаем где там и чего указано про utf-8.
Прочитал. Нигде и ничего. Как, собственно, и ожидалось. А вот MasterZiv утверждает обратное:
[/quot MasterZiv]Он должен быть не только юникодным, а конкретно поддерживать кодировку
UTF-8.[/quot]
Т.е. что шрифт может (и должен) поддерживать utf-8.

Будете утверждать, что он прав?

Шрифт это набор глифов. Он либо содержит глифы для первых 256 символов, либо больше. UTF-8
- многобайтная кодировка для Unicode. Чтобы отобразить текст в кодировке UTF-8, её нужно
сначала преобразовать в Unicode (UCS2 или UCS4), а уже потом по полученному коду найти
нужный глиф. Если он в данном шрифте есть. Это может сказать GetFontUnicodeRanges(). Ну а
если в шрифте нет глифа для данного кода, то на экране будет квадрат. Что и видит ТС.

Команда chcp задаёт способ преобразования из однобайтной кодировки в unicode перед
выводом. Так что получить на экране мусор можно если
а) Кодировка данных при вызове ANSI-функций вывода не соответствует установленной сhcp.
б) Unicode-функциям скармливается мусор вместо ожидаемого виндой UTF-16.
в) Шрифт консольного окна не имеет глифов для выводимых символов.

Возражения?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38060380
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivDimitry Sibiryakovпропущено...

А консольный шрифт у тебя юникодный?..


Он должен быть не только юникодным, а конкретно поддерживать кодировку UTF-8.

На самом деле в винде поддержки UTF-8 нет, на сколько я знаю, ни один шрифт не поддерживает UTF-8,
и нет кодовой страницы для UTF-8.
(могу ошибаться)
Дмитрий. Я квотирую еще раз ваш спор.

Я считаю что полноценной поддержки для UTF-8 предоставить
технически невозможно по самому определению и по свойствам
UTF-8. В эту кодировку заложена принципиальная неограниченность
набора символов. Wiki пишет что существуют несколько стандартов
по отображению utf-8 на 2,4,6 байт других кодировок но это частные
случаи и допущения и прочие договорённости.

Поэтому обеспечить шрифт поддержкой utf-8 на 100% технически
невозможно! Это - ваша ошибка! Поймите это.
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38060505
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonWiki пишет
Не читайте заборы. Читайте первоисточники www.unicode.org
Basic plane вполне реально обеспечить, а расширенные практически никому не нужны.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38060515
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что за basic plane?

Поиск по site:www.unicode.org AND basic AND plane ничего не даёт.
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38060520
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЧто за basic plane?
Это первые 65635 символов, покрываемые UCS2.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38060615
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не работает виндовая консоль с utf8 - вывод хаотически "рубится".
В моих экспериментах, как правило, на первом кириллическом символе. Перенаправление - работает, вывод - нет.
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38060623
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovНе работает виндовая консоль с utf8 - вывод хаотически "рубится".

Типичный симптом переполнения буфера. Кто-то забыл учесть существование многобайтных
кодировок.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38060644
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тестовый пример. У меня, откомпилированный BCB или MSVC2010 и запущенный в окне "cmd /w" со шрифтом Lucida Console, стабильно выводит "абвгде" во всех кодировках, какие мне в голову пришли.
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38060692
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovmaytonЧто за basic plane?
Это первые 65635 символов, покрываемые UCS2.

А кто будет создавать шрифт с поддержкой 64 К символов?
Этож ресурс! Он будет для каждого размера шрифта растеризоваться
и прогружаться в память. При том что нормальному человеку
хватает поддержки 2-3 языков в операционке.
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38060717
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonОн будет для каждого размера шрифта растеризоваться и прогружаться в память.

С какого бы перепою он растеризовался?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38060718
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovmaytonОн будет для каждого размера шрифта растеризоваться и прогружаться в память.

С какого бы перепою он растеризовался?..

А иначе его на экране не видно.
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38061028
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я конечно не спец в этом вопросе, но насколько знаю, что еще важно озвучить что за винда. Вероятно, что в XP, где utf16 будут траблы, а вот в vista/7 может и заведется на сухую без преобрахзований (но не уверен).
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38061037
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ggg_oldВероятно, что в XP, где utf16 будут траблы
Почему у меня в ХР с вышеприложенным примером траблов нет? Руки?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38061040
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, да там оказывается баг в консоли, а вы стены головой пробиваете.
Оцените тред
http://connect.microsoft.com/VisualStudio/feedback/details/696663/cout-cannot-print-utf-utput-to-console
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38061041
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
форум поел ссылку.
cout-cannot-print-utf-utput-to-console
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38061153
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ggg_oldфорум поел ссылку.
cout-cannot-print-utf-utput-to-console Я в курсе что там баг. Вышеприведенные методы побеждают баг в старых версиях студии. Собственно вопрос был как победить этот баг в 2012.
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38061822
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА кто будет создавать шрифт с поддержкой 64 К символов?Создано уже.
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38061826
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sherzod_Вышеприведенные методы побеждают баг в старых версиях студии. Собственно вопрос был как победить этот баг в 2012.Там, вообще-то, написано, что баг не в студии и что fputs - работает.
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38061829
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

хотелось бы работать с потоками. Есть проект предложенный в буст - реализация utf-8 enabled потоков для студии, но это слишком. Пусть будет костыль но без навесов.
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38061838
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sherzod_хотелось бы работать с потоками.Я пока не уловил связи между необходимостью использовать "функцию без бага", а не "более привычную" и потоками.
Ну, т.е. что доступ к консоли неплохо бы упорядочить - понятно, но вот как это связано с функцией вывода ...
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38061887
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovsherzod_хотелось бы работать с потоками.Я пока не уловил связи между необходимостью использовать "функцию без бага", а не "более привычную" и потоками.
Ну, т.е. что доступ к консоли неплохо бы упорядочить - понятно, но вот как это связано с функцией вывода ...То что вы не улавливаете эту связь, связано с тем что вы не улавливаете разницу между вводом-выводом в C и в С++, которая на ваш взгляд исчерпывается словами "привычный" или "упорядочить". Как только "словите" разницу, проникнитесь так скать, замыслом, так и связь разумеете. А puts еще надо проверить, завтра на работе посмотрю.
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38062194
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ggg_oldя конечно не спец в этом вопросе, но насколько знаю, что еще важно озвучить что за винда. Вероятно, что в XP, где utf16 будут траблы, а вот в vista/7 может и заведется на сухую без преобрахзований (но не уверен).Все правильно я такое встречал если какаято раскладка не установленна в XP получется эксепшн, конкретно на языках японский,китайский итам еще какие то были.И эти эксеншены проподали как только я добовлял соответсвенный язык.
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38063687
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovsherzod_Вышеприведенные методы побеждают баг в старых версиях студии. Собственно вопрос был как победить этот баг в 2012.Там, вообще-то, написано, что баг не в студии и что fputs - работает.fputs не работает, так же как и puts. Это не баг студии, это баг мелкософта, у них изначально кривая поддержка unicode. Студия до сих пор сохраняет файлы в cp1251,а в винде до сих пор есть BOM, и то она с ним не умеет работать.
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38064084
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное консоль Windows != консоль linux. От этого все ошибки в наших суждениях.
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38064197
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я почему предположил про версию винды, ибо какое-то время назад с поддержкой юникода в консоли были даже у макос. В версии 10.4 приходилось шаманить, что-бы она хотя-бы отображала русские буквы и ничего нельзя было сделать, что-бы их вводить. Просто код консоли это не поддерживал и все тут. В более позднийх версиях это починили. Так в винде оно может просто тупо не поддерживаться корректно, либо поддерживаться ограниченно. Т.к. микрософт занят допиливанием всяких паинтов и проводников на дотнет с модными тулбарами, то на консоль ей может быть просто не хватает ни времени ни желания. Посему можно долго править локали, менять шрифты но нормально оно работать не будет все-равно.
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38064259
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sherzod_fputs не работает, так же как и puts. Это не баг студии, это баг
мелкософта, у них изначально кривая поддержка unicode.
Да неужели?..
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=987239&msg=13559242
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38064350
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovПрочитал. Нигде и ничего. Как, собственно, и ожидалось. А вот MasterZiv утверждает обратное:
[/quot MasterZiv]Он должен быть не только юникодным, а конкретно поддерживать кодировку
UTF-8.
Т.е. что шрифт может (и должен) поддерживать utf-8.

[/quot]

Это значит, что либо приложение должно давать кодировку символов в UTF-8 и в шрифте должна быть таблица перекодировки (код символа в номер глифа внутри шрифта) для UTF-8, либо там должна быть какая -то другая таблица перкодировки и
операционка должна перекодировать в эту кодировку, если она сподобится ещё это сделать (а с какого перепугу).

Dimitry SibiryakovШрифт это набор глифов. Он либо содержит глифы для первых 256 символов, либо больше. UTF-8



В TTF глифы нумеруются отдельно, и отдельно есть таблицы перекодировки символов в номер глифа.
Это чтобы шрифт мог поддерживать несколько кодировок.
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38064355
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь пишут что нужно использовать Lucida Console.


Lucida Console только UTF-16 поддерживает. На сколько я знаю. МОжно конечно посмотреть...
...
Рейтинг: 0 / 0
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
    #38064650
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivLucida Console только UTF-16 поддерживает."О сколько нам открытий чудных ...."
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]