Исправления в Firebird 2.5, касающиеся кодировки строки подключения
Автор: Adriano dos Santos Fernandes [email protected]
Дата: 2008-12-15
До FB 2.5 имена файлов, используемые в строке подключения, всегда передаются от клиента к
серверу без какого-либо преобразования. На сервере эти имена файлов также используются с функциями OS API без
какого-либо преобразования. Это создает ситуацию, когда имена файлов, содержащие не-ASCII символы, плохо
взаимодействуют, когда клиент и сервер работают на разных ОС или даже на одной ОС с использованием разных
кодовых страниц.
Эта проблема решается в FB 2.5 следующим образом:
По умолчанию имя файла считается находящимся в кодовой странице ОС.
Вводится новый DPB, названный isc_dpb_utf8.filename. Его смысл - изменить указанное выше правило, чтобы FB
считал переданное имя файла находящимся в UTF-8.
Если клиент версии 2.5 (или новее) взаимодействует с удаленным сервером старше версии 2.5, и
использовался isc_dpb_utf8.filename, клиент преобразует имя файла из UTF-8 в кодовую страницу
клиента и передает это имя файла серверу. Клиент удаляет DPB isc_dpb_utf8.filename.
Это гарантирует обратную совместимость, когда на клиенте и сервере используется одна и та же кодовая страница
ОС.
Если клиент версии 2.5 (или новее) взаимодействует с сервером версии 2.5 (или новее), и
isc_dpb_utf8.filename не использовался, клиент преобразует имя файла из кодовой страницы ОС в
UTF-8 и вставляет DPB isc_dpb_utf8.filename. Если isc_dpb_utf8.filename использовался, клиент просто
передает исходное имя файла в DPB серверу. Таким образом, клиент всегда передает серверу
имя файла в UTF-8 и DPB isc_dpb_utf8.filename.
Имя файла, полученное на сервере, подчиняется тем же правилам, что указаны выше. Но обратите внимание, что клиент версии 2.5
может автоматически преобразовать имя файла и вставить DPB. Клиенты старше версии 2.5 этого не делают,
поэтому полученные имена файлов будут считаться находящимися в кодовой странице сервера. Мы снова гарантируем
обратную совместимость, когда кодовая страница клиента и сервера совпадает.
Кодовая страница ОС и UTF-8 могут быть не лучшим выбором для имен файлов. Например, если у вас есть
скрипт ISQL (или другого инструмента), и этот скрипт использует другую кодировку соединения. Вы не могли
корректно редактировать скрипт (или любой файл), используя несколько кодировок (кодовых страниц). Теперь вы можете
кодировать любой символ Unicode как ASCII-символы в имени файла в строке подключения. Это
достигается с помощью символа #. Он является префиксом для номера кодовой точки Unicode (в шестнадцатеричном
формате, как обозначение U+XXXX). Вы должны записывать это так: #XXXX, где X - 0-9, a-f, A-F.
Если вы хотите использовать литеральный символ #, вы можете использовать ## или #0023 (номер кодовой точки для него).
Этот символ интерпретируется с этой новой семантикой на сервере, даже если клиент старше
версии 2.5.
Кодовая страница ОС, используемая для преобразований:
- Windows: кодовая страница ANSI Windows
- Другие: UTF-8
Обновлено для 2.5 Beta 2: 2008-07-11
Эти правила теперь также действуют для строковых элементов DPB.