Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек. / 25 сообщений из 39, страница 1 из 2
30.11.2012, 10:53
    #38059346
sherzod_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
Доброго времени.

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

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

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

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

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

пробовал.Setlocale пробовал?
...
Рейтинг: 0 / 0
30.11.2012, 12:00
    #38059477
sherzod_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
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
30.11.2012, 14:16
    #38059776
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
sherzod_Выводятся или иероглифы или прямоугольники.
А консольный шрифт у тебя юникодный?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
30.11.2012, 14:35
    #38059819
sherzod_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
Dimitry Sibiryakov,

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


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

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

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

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

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

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

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

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

C уважением,
mayton
...
Рейтинг: 0 / 0
30.11.2012, 17:35
    #38060288
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
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
30.11.2012, 18:05
    #38060380
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
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
30.11.2012, 19:30
    #38060505
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
maytonWiki пишет
Не читайте заборы. Читайте первоисточники www.unicode.org
Basic plane вполне реально обеспечить, а расширенные практически никому не нужны.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
30.11.2012, 19:39
    #38060515
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
Что за basic plane?

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

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

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

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

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

А иначе его на экране не видно.
...
Рейтинг: 0 / 0
01.12.2012, 14:22
    #38061028
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
я конечно не спец в этом вопросе, но насколько знаю, что еще важно озвучить что за винда. Вероятно, что в XP, где utf16 будут траблы, а вот в vista/7 может и заведется на сухую без преобрахзований (но не уверен).
...
Рейтинг: 0 / 0
01.12.2012, 14:45
    #38061037
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
Ggg_oldВероятно, что в XP, где utf16 будут траблы
Почему у меня в ХР с вышеприложенным примером траблов нет? Руки?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
01.12.2012, 14:46
    #38061040
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
О, да там оказывается баг в консоли, а вы стены головой пробиваете.
Оцените тред
http://connect.microsoft.com/VisualStudio/feedback/details/696663/cout-cannot-print-utf-utput-to-console
...
Рейтинг: 0 / 0
01.12.2012, 14:47
    #38061041
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек.
форум поел ссылку.
cout-cannot-print-utf-utput-to-console
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / VS2012, C++, Вывод utf-8 в консоль. Без доп библиотек. / 25 сообщений из 39, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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