Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
6 / 8 / 6
Регистрация: 23.01.2018
Сообщений: 47
Записей в блоге: 5

Отображение суррогатной пары (символа с кодом > FFFF)

06.03.2018, 00:48. Показов 2880. Ответов 10

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Итак, стоит задача отобразить unicode-символ с кодом > FFFF
Получить суррогатную пару можно вот таким способом:

C#
1
string st = char.ConvertFromUtf32(num);
где в переменной num нужный код.
На выходе получается суррогатная пара (2 символа, которые, однако, должны отображаться как один). Но при отправке, например в TextBox или Label, они все равно отображаются как 2

Неужто C# не поддерживает суррогатные пары "из коробки"?

Сразу скажу, шрифт для отображения таких символов имеется, но дело не в шрифте.

Добавлено через 6 часов 38 минут
TextBox, Label и даже MessageBox не поддерживают вывод суррогатной пары, как я не старался.

Решение: суррогатные пары поддерживает RichTextBox

Но нигде это четко не прописано. Решил методом научного тыка, основываясь на Windows controls, including Edit and Rich Edit, support supplementary characters.

Не по теме:

медленно фонарея ушел в закат

0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.03.2018, 00:48
Ответы с готовыми решениями:

Вывод символа с максимальны и минимальным кодом
Есть код, который выводит символ с минимальным кодом, а как в сделать чтобы в этой же программе выводил символ с максимальным кодом? И...

Скрытие и отображение картинок в Word-е кодом
Доброго времени суток! столкнулся с такой проблемкой: есть вордовский файлик и в нём нужно сделать пару манипуляций с помощью макросов....

Заменить в строке обозначение символа с заданным кодом на сам символ
Помогите, пожалуйста... Срочно надо лабу сдать. Заменить в строке принятое в Си обозначение символа с заданным кодом (например, \101) на...

10
Эксперт .NET
 Аватар для Rius
13018 / 7584 / 1660
Регистрация: 25.05.2015
Сообщений: 23,050
Записей в блоге: 14
06.03.2018, 10:45
Посмотрите, не то ли:
Вложения
Тип файла: zip WindowsFormsAppStpigidy.zip (17.7 Кб, 5 просмотров)
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
06.03.2018, 10:53
Цитата Сообщение от stpigidy Посмотреть сообщение
TextBox, Label и даже MessageBox не поддерживают вывод суррогатной пары
Может все-таки шрифт?

C#
1
2
3
4
5
var text = char.ConvertFromUtf32(0x2A601);
bool isSurrogate = char.IsSurrogatePair(text, 0); // True
 
label1.Text = text;
textBox1.Text = text;
Название: 2018-03-06 11_52_27-Form1.png
Просмотров: 73

Размер: 1.7 Кб
0
6 / 8 / 6
Регистрация: 23.01.2018
Сообщений: 47
Записей в блоге: 5
06.03.2018, 20:20  [ТС]
Rius, У вас пример под какой-то более новый Framework и студию.

Наверное, следовало уточнить, что мне нужно сделать под .NET Framework 2.0

kolorotur, Не в шрифте, даже если шрифт не тот, в TextBox и Label видно 2 символа, в RichTextBox 1

Впрочем, дело может быть в неполной поддержке Unicode .NET Framework 2.0. или 2008 VS.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
06.03.2018, 22:44
stpigidy, проверил под .NET 2.0 и на 2010-й студии (2008-й нет) — результат тот же, рабочий.
Может у вас не суррогатная пара, а лигатура? Какой код символа?
0
6 / 8 / 6
Регистрация: 23.01.2018
Сообщений: 47
Записей в блоге: 5
06.03.2018, 23:33  [ТС]
kolorotur,

Ну вот, например, анатолийский иероглиф 0x14476. Шрифт есть. Прикреплю к посту шрифт и пример с TextBox, label и RichTextBox. Кстати, при дальнейших экспериментах выяснилось, RichTextBox видит, что это 1 символ, а не 2, но отобразить не может, даже если ему напрямую задаешь шрифт.
Из windows программ символ корректно отображается в BabelMap (специальная программа, поддерживающая весь диапазон Unicode) и в графическом редакторе Inkscape. Word не может вообще шрифт назначить символу, хотя видит его как один символ и в предпросмотре в окне установки шрифта даже показывает.

Я так понимаю, чтобы добиться хотя бы отображения всех символов Unicode надо брать из шрифта нужный глиф и вручную отрендерить его в PictureBox, что-ли...

Конечная цель вообще написать простой редактор, поддерживающий все символы Юникода (вообще некоторые - астрологические, алхимические, египетские и лувийские иероглифы, но где некоторые там и все). А пока решил сделать нечто вроде урезанной версии BabelMap - программу, отображающую символы Unicode и их коды, типа таблицы символов в Windows
Вложения
Тип файла: zip unicode.zip (276.3 Кб, 4 просмотров)
0
6 / 8 / 6
Регистрация: 23.01.2018
Сообщений: 47
Записей в блоге: 5
07.03.2018, 02:13  [ТС]
Внезапно, PictureBox отрисовал без проблем:

C#
1
2
3
4
5
6
7
8
private void pbDraw_Paint(object sender, PaintEventArgs e)
        {
            Font myFont = new Font("Anatolian", 54);
 
            string st = char.ConvertFromUtf32(0x14476);
 
            e.Graphics.DrawString(st, myFont, Brushes.Green, new Point(2, 2));
        }
Но это все-таки полумеры, хотелось бы разобраться, почему TextBox вообще не воспринимает суррогатные пары как надо, или хотя бы заставить RichTextBox применять нужный шрифт с символами не из BMP Юникода.
Изображения
 
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
07.03.2018, 11:21
stpigidy, запустил ваш проект — все отображается нормально. Пришлось только ричтекстбоксу шрифт установить до установки текста.
Запустил ту же откомпилированную прогу на семерке без сервиспака и с .NET 4.5.2 — отображает двумя символами.
Сейчас установлю сервиспак и последний фреймворк — посмотрим, поможет ли.
Может, дело вообще в виндовсе — где-нибудь надо установить галочку в дебрях региональных настроек.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
07.03.2018, 17:30
Лучший ответ Сообщение было отмечено Usaga как решение

Решение

С установкой SP1 для семерки все заработало, даже фреймворк обновлять не пришлось:


Похоже, что проблема где-то в винде сидела, а не в шарпе/.NET
1
Эксперт .NET
 Аватар для Rius
13018 / 7584 / 1660
Регистрация: 25.05.2015
Сообщений: 23,050
Записей в блоге: 14
07.03.2018, 17:42
Типа такого, возможно: https://support.microsoft.com/... squares-in
0
6 / 8 / 6
Регистрация: 23.01.2018
Сообщений: 47
Записей в блоге: 5
07.03.2018, 22:47  [ТС]
kolorotur, В XP проблема решилась также установкой шрифта перед тем, как задать текст.
Т.е. получается, самый универсальный способ - использовать RichTextBox и устанавливать шрифт перед установкой текста.

Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.03.2018, 22:47
Помогаю со студенческими работами здесь

Собственная процедура/функция которая возвращает значение символа за его кодом
Помогите пожалуйста создать собственную процедуру/функцию которая возвращает значение символа за его кодом. Вводим: число Получаем:...

Ввести два символа с клавиатуры и сравнить и вывести символ с большим кодом
Доброго времени суток ув. Форумчане! - - - - - Я наверное полное дно и не вижу очевидного, но вроде бы делаю все правильно, но консоль...

Lisp plus: удалить заданное свойство у символа точечной пары, доступного по заданному ключу
Имеется ассоциативный список, вторым элементом точечных пар которого является символ. Удалить заданное свойство у символа точечной пары,...

Программа выводит на экран только один символ из строки с максимальным кодом символа
Помогите написать 2 программы. 1.Пользователь вводит строку. Программа выводит на экран только один символ из строки с максимальным...

Отображение символа
Пытаюсь определить город по ip, записать его в cookie и после отобразить на странице. Так как я использую виртуальный сервер происходит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru