Эта страница переведена машинным переводом. Читайте английский оригинал. English

Библиотека IBSurgeon

Исправления в 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.