Подробности
[В начало]
Проблема в реализации № S0690
Краткое описание
Несоответствие стандарту при работе с "assigned characters" (Glib Unicode Manipulation)
Подробное описание
Из описания функции g_unichar_isdefined:
Returns : TRUE if the character has an assigned value
То, что здесь названо "character", в стандарте Unicode 5.0 и выше называется "code point". Насчёт присвоения этим code points значений в этом стандарте указано следующее (http://www.unicode.org/versions/Unicode5.0.0/ch02.pdf, Chapter 2 "General Structure", section 2.4 "Code Points and Characters"):
Not all assigned code points represent abstract characters; only Graphic, Format, Control and Private-use do. Surrogates and Noncharacters are assigned code points but are not assigned to abstract characters.Неясно, в каком смысле в описании g_unichar_isdefined используется термин "assigned".
Если имеются в виду code points assigned to abstract characters, g_unichar_isdefined должна возвращать FALSE для code points из групп "Surrogates" и "Noncharacters".
Если имеются в виду просто assigned code points, g_unichar_isdefined должна возвращать TRUE для code points из групп "Surrogates" и "Noncharacters".
Тем не менее, в версиях glib вплоть до 2.17.3 g_unichar_isdefined возвращает TRUE для "Surrogates", но FALSE для "Noncharacters".
В качестве примера можно проверить, что выдаёт g_unichar_isdefined для следующих code points:
- 0xD800 (U+D800) - "surrogate", функция выдаёт TRUE
- 0xFDD0 (U+FDD0) - "noncharacter", функция выдаёт FALSE
Т.е. поведение функции g_unichar_isdefined не соответствует ни одному, ни другому пониманию термина assigned, указанным в стандарте Unicode.
Возможно, "has an assigned value" используется в описании g_unichar_isdefined в каком-то третьем смысле, не указанном в стандарте Unicode, это стоит пояснить в документации явно, чтобы не вызывать путаницы.
Раздел стандарта
Linux Standard Base Desktop Specification 3.2, section 15.2.1.1 - "Interfaces for GTK General purpose utility library", который ссылается на Glib 2.6.2 Reference Manual (http://www.gtk.org/api/2.6/glib/glib-Unicode-Manipulation.html#g-unichar-isdefined)
Компонент
gtk-glib 2.17.3 and below
Принято
Gnome Bugzilla 541507
Статус
Исправлено в glib 2.17.4
[В начало]