Про ICU

Как известно, в Firebird 2.1, для работы с кодовыми страницами, была добавлена поддержка библиотеки ICU. Изначально — версия 3.0 (FB2.1, FB2.5). FB3 работает с ICU 5.2.

Компоненты доступа, если они претендуют на «нативе» поддержку Firebird, тоже должны уметь работать с ICU. Так что приходится с этим возиться.

На текущий момент, IBProvider поддерживает ICU3.

При тестировании провайдера с FB3 и изучении хедеров ICU 5.2, обнаружилась пара новых забавных вещей.

1. Кодовая страница GB18030 в ICU3 и ICU5.2 отличаются друг от друга. Это обнаружилось уже после релиза FB3, потому что поддержка GB18030 была возвращена буквально за неделю до выпуска FB3. На протяжении пяти с лихом лет разработки FB3, GB18030 не была подключена. Поэтому, как бы, и не тестировалась.

Интересно, что по этому поводу думает Кальтенбруннер?

2. При сравнении хедеров ICU3 и ICU5.2 обнаружились различия вида:

//ICU3
     /*
      * The error code in the range 0x10400-0x104ff are reserved for IDNA related error codes
      */
      U_IDNA_ERROR_START=0x10400,
      U_IDNA_PROHIBITED_ERROR,
      U_IDNA_UNASSIGNED_ERROR,
      U_IDNA_CHECK_BIDI_ERROR,
//ICU5.2
    /*
     * The error code in the range 0x10400-0x104ff are reserved for IDNA related error codes
     */
    U_IDNA_PROHIBITED_ERROR=0x10400,
    U_IDNA_ERROR_START=0x10400,
    U_IDNA_UNASSIGNED_ERROR,
    U_IDNA_CHECK_BIDI_ERROR,

То есть, по ходу, апи ICU3 и ICU5.2 не совместимы на бинарном уровне. Как следствие, для поддержки ICU 5.2 надо будет городить новую подсистему.

Не то чтобы это сильно расстраивало, потому что было ожидаемо. Но маленькая надежда обойтись малой кровью таки была…

One Comment

Dmitry Kovalenko  on 5 августа, 2017

На сайт IBProvider-a залиты новые триалы (v3.43) с поддержкой ICU v52 (icuuc52.dll).

Leave a Comment