Проблема буквы 'я' в Interbase Services API

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
Saltaev
Сообщения: 6
Зарегистрирован: 25 апр 2006, 13:24

Проблема буквы 'я' в Interbase Services API

Сообщение Saltaev » 04 июн 2006, 09:56

"Заливаю" пользователей в БД посредством Interbase Services API:
isc_service_start(..., isc_action_svc_add_user | isc_action_svc_modify_user, ...). isc_spb_user_name - набор латинских символов, а вот isc_spb_sec_firstname, isc_spb_sec_middlename и isc_spb_sec_lastname на русском. Так вот, если используется кодировка Windows-1251 то при попытке создать/заменить пользователя, в ФИО которого содержится строчная русская 'я' происходит
  • Unable to complete network request to host "localhost" (isc_network_error).
    Error reading data from the connection (isc_net_read_err).:shock:
Понятно, что буква 'я' в Windows-1251 имеет код 0xFF и этот код имеет какой то особый смысл для Services API. Найдено "противоядие" - строчную 'я' заменяю на прописную 'Я' или использую вообще другую кодировку (например CP-866). Но все-таки, в чем же причина и как ее "грамотно" побороть? :?:

Информация о версиях:
  • gcc version 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)
    Firebird TCP/IP server version LI-V1.5.2.4731 Firebird 1.5
    Kernel 2.6.9-1.667 on an i686
04.06.2006

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 04 июн 2006, 10:41

все буржуи любят в своих протоколах использовать символы выше 127.
Грамотно побороть - это починить код сервера.
p.s. заливать ФИО внутрь security.fdb не вижу смысла, т.к. в FB 2 к этой БД прямой доступ запрещен.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 05 июн 2006, 08:47

Еще можно вспомнить что поля ФИО в security.fdb имеют charset UNICODE_FSS и соответственно их надо заполять в utf-8.

Ответить