Цю сторінку перекладено машинним перекладом. Читайте англійський оригінал. 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.

Якщо клієнт v2.5 (або новіший) спілкується з віддаленим сервером старішим за v2.5, і

використовувався isc_dpb_utf8.filename, клієнт перетворює ім’я файлу з UTF-8 у кодову сторінку

клієнта та передає це ім’я файлу серверу. Клієнт видаляє DPB isc_dpb_utf8.filename.

Це гарантує зворотну сумісність, коли люди використовують однакову кодову сторінку на клієнті та

серверній ОС.

Якщо клієнт v2.5 (або новіший) спілкується із сервером v2.5 (або новішим), і

isc_dpb_utf8.filename не використовувався, клієнт перетворює ім’я файлу з кодової сторінки ОС у

UTF-8 та вставляє DPB isc_dpb_utf8.filename. Якщо isc_dpb_utf8.filename використовувався, клієнт просто

передає оригінальне ім’я файлу всередині DPB серверу. Отже, клієнт завжди передає серверу

ім’я файлу у UTF-8 та DPB isc_dpb_utf8.filename.

Ім’я файлу, отримане на сервері, підлягає тим самим правилам, що й вище. Але зауважте, що клієнт v2.5

може автоматично перетворювати ім’я файлу та вставляти DPB. Клієнти старіші за v2.5 цього не роблять,

тож отримані імена файлів вважатимуться такими, що перебувають у кодовій сторінці сервера. Ми знову гарантуємо

зворотну сумісність, коли кодова сторінка клієнта та сервера однакова.

Кодова сторінка ОС та UTF-8 можуть бути не найкращим вибором для імен файлів. Наприклад, якщо у вас є

скрипт ISQL (або іншого інструмента), і цей скрипт використовує інший набір символів з’єднання. Ви не могли б

коректно редагувати скрипт (або будь-який файл), використовуючи кілька наборів символів (кодових сторінок). Тож тепер ви можете

кодувати будь-який символ Unicode як ASCII-символи у імені файлу в рядку з’єднання. Це

досягається за допомогою символу #. Він є префіксом для номера кодової точки Unicode (у шістнадцятковому

форматі, як позначення U+XXXX). Ви маєте записувати це так: #XXXX, де X - це 0-9, a-f, A-F.

Якщо ви хочете використати буквальний символ #, ви можете використати ## або #0023 (номер кодової точки для нього).

Цей символ інтерпретується з цією новою семантикою на сервері, навіть якщо клієнт старіший

за v2.5.

Кодова сторінка ОС, що використовується для перетворень, така:

- Windows: кодова сторінка Windows ANSI

- Інші: UTF-8

Оновлено для 2.5 Beta 2: 2008-07-11

Ці правила тепер також дійсні для рядкових елементів DPB.