IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.
Модератор: kdv
-
Saltaev
- Сообщения: 6
- Зарегистрирован: 25 апр 2006, 13:24
Сообщение
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).
Понятно, что буква 'я' в 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.