Подробности

[В начало]

Проблема в реализации № 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

[В начало]