Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
stpigidy
5 / 7 / 6
Регистрация: 23.01.2018
Сообщений: 38
Записей в блоге: 4
1

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

06.03.2018, 00:48. Просмотров 846. Ответов 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2018, 00:48
Ответы с готовыми решениями:

Вывод символа с максимальны и минимальным кодом
Есть код, который выводит символ с минимальным кодом, а как в сделать чтобы в...

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

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

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

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

10
Rius
Эксперт .NET
5131 / 3351 / 820
Регистрация: 25.05.2015
Сообщений: 10,294
Записей в блоге: 11
Завершенные тесты: 4
06.03.2018, 10:45 2
Посмотрите, не то ли:
0
Вложения
Тип файла: zip WindowsFormsAppStpigidy.zip (17.7 Кб, 4 просмотров)
kolorotur
Эксперт .NET
10712 / 8872 / 2221
Регистрация: 17.09.2011
Сообщений: 15,259
Завершенные тесты: 1
06.03.2018, 10:53 3
Цитата Сообщение от 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
Просмотров: 41

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

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

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

Впрочем, дело может быть в неполной поддержке Unicode .NET Framework 2.0. или 2008 VS.
0
kolorotur
Эксперт .NET
10712 / 8872 / 2221
Регистрация: 17.09.2011
Сообщений: 15,259
Завершенные тесты: 1
06.03.2018, 22:44 5
stpigidy, проверил под .NET 2.0 и на 2010-й студии (2008-й нет) — результат тот же, рабочий.
Может у вас не суррогатная пара, а лигатура? Какой код символа?
0
stpigidy
5 / 7 / 6
Регистрация: 23.01.2018
Сообщений: 38
Записей в блоге: 4
06.03.2018, 23:33  [ТС] 6
kolorotur,

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

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

Конечная цель вообще написать простой редактор, поддерживающий все символы Юникода (вообще некоторые - астрологические, алхимические, египетские и лувийские иероглифы, но где некоторые там и все). А пока решил сделать нечто вроде урезанной версии BabelMap - программу, отображающую символы Unicode и их коды, типа таблицы символов в Windows
0
Вложения
Тип файла: zip unicode.zip (276.3 Кб, 2 просмотров)
stpigidy
5 / 7 / 6
Регистрация: 23.01.2018
Сообщений: 38
Записей в блоге: 4
07.03.2018, 02:13  [ТС] 7
Внезапно, 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
Изображения
 
kolorotur
Эксперт .NET
10712 / 8872 / 2221
Регистрация: 17.09.2011
Сообщений: 15,259
Завершенные тесты: 1
07.03.2018, 11:21 8
stpigidy, запустил ваш проект — все отображается нормально. Пришлось только ричтекстбоксу шрифт установить до установки текста.
Запустил ту же откомпилированную прогу на семерке без сервиспака и с .NET 4.5.2 — отображает двумя символами.
Сейчас установлю сервиспак и последний фреймворк — посмотрим, поможет ли.
Может, дело вообще в виндовсе — где-нибудь надо установить галочку в дебрях региональных настроек.
0
kolorotur
Эксперт .NET
10712 / 8872 / 2221
Регистрация: 17.09.2011
Сообщений: 15,259
Завершенные тесты: 1
07.03.2018, 17:30 9
Лучший ответ Сообщение было отмечено Usaga как решение

Решение

С установкой SP1 для семерки все заработало, даже фреймворк обновлять не пришлось:
Отображение суррогатной пары (символа с кодом > FFFF)


Похоже, что проблема где-то в винде сидела, а не в шарпе/.NET
1
Rius
Эксперт .NET
5131 / 3351 / 820
Регистрация: 25.05.2015
Сообщений: 10,294
Записей в блоге: 11
Завершенные тесты: 4
07.03.2018, 17:42 10
Типа такого, возможно: https://support.microsoft.com/km-kh/...-as-squares-in
0
stpigidy
5 / 7 / 6
Регистрация: 23.01.2018
Сообщений: 38
Записей в блоге: 4
07.03.2018, 22:47  [ТС] 11
kolorotur, В XP проблема решилась также установкой шрифта перед тем, как задать текст.
Т.е. получается, самый универсальный способ - использовать RichTextBox и устанавливать шрифт перед установкой текста.

Спасибо!
0
07.03.2018, 22:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2018, 22:47

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

Отображение символа
Пытаюсь определить город по ip, записать его в cookie и после отобразить на...

Ввести с клавиатуры строку символов. На новой строке вывести два символа: с max и min ASCII кодом
Здравствуйте!!! Код работает нормально,но он в конце выводит числа min и max)...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru