Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 FireBird Charset NONE  [new]
cptngrb
Member

Откуда:
Сообщений: 618
Досталась мне база FireBird 2.5 с полями кодировкой NONE, где данные отображаются кракозяблями, а должны русскими символами. В в самой базе вроде бы кодировка Win1251, но это не точно. Со структурой базы я делать ничего не могу, записывают в нее несколько программ и в какой кодировке не понятно.
Мне нужно на стороне Delphi 10 переконвертить кодировку и засунуть эти строки в memTable. Как лучше это сделать?
13 ноя 20, 11:00    [22231279]     Ответить | Цитировать Сообщить модератору
 Re: FireBird Charset NONE  [new]
cptngrb
Member

Откуда:
Сообщений: 618
При просмотре IBExpert'ом в таблице тоже кракозябли. хотя описания таблиц на русском нормально отображаются. Просто кто-то пишет в таблицу в непонятной кодировке, а мне нужно представить это в читаемом виде
13 ноя 20, 11:02    [22231281]     Ответить | Цитировать Сообщить модератору
 Re: FireBird Charset NONE  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14759
В IBExpert пробуй в настройках подключения указывать ту или иную кодировку: utf8, win1251, например.

Сделай в Delphi простой проект с одной таблицей и в настройках подключения меняй кодировку и смотри, нормально ли стали отображаться данные в DBGrid.
13 ноя 20, 11:11    [22231291]     Ответить | Цитировать Сообщить модератору
 Re: FireBird Charset NONE  [new]
cptngrb
Member

Откуда:
Сообщений: 618
X11, в IBExpert пробовал utf8, win1251, ничего не меняется. Нужно все кодировки перебрать?
13 ноя 20, 11:18    [22231298]     Ответить | Цитировать Сообщить модератору
 Re: FireBird Charset NONE  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14759
ты хоть пару картинок выложи, может кто визуально отгадает колировку...
кстати
https://habr.com/ru/post/147843/

или что-то вроде https://2cyr.com/decode/?lang=ru

Сообщение было отредактировано: 13 ноя 20, 11:21
13 ноя 20, 11:26    [22231307]     Ответить | Цитировать Сообщить модератору
 Re: FireBird Charset NONE  [new]
alekcvp
Member

Откуда:
Сообщений: 2494
cptngrb
X11, в IBExpert пробовал utf8, win1251, ничего не меняется. Нужно все кодировки перебрать?

Можно попробовать в делфи получить из базы текст, засунуть его в буфер обмена, а потом засунуть в shtirlitz 4 и посмотреть в какой кодировке оно было изначально. Не 100% гарантия что сработает, но вдруг.
13 ноя 20, 11:28    [22231309]     Ответить | Цитировать Сообщить модератору
 Re: FireBird Charset NONE  [new]
cptngrb
Member

Откуда:
Сообщений: 618
Пока писал, разобрался. Кодировка Win1251 в самой строке, я ее сконвертировал с помощью TEncoding в UTF-8.
13 ноя 20, 11:29    [22231310]     Ответить | Цитировать Сообщить модератору
 Re: FireBird Charset NONE  [new]
cptngrb
Member

Откуда:
Сообщений: 618
а в самом IBExpert символы нормально не отображаются из-за того, что в таблице намешано несколько кодировок сразу
13 ноя 20, 11:51    [22231331]     Ответить | Цитировать Сообщить модератору
 Re: FireBird Charset NONE  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14759
Может, у каждой записи есть какой-то поле, которое определяет кодировку?
Ну что это за бред, когда в одном поле таблицы куча кодировок? Получается, что каждая запись в своей какой-то кодировке?
13 ноя 20, 11:57    [22231335]     Ответить | Цитировать Сообщить модератору
 Re: FireBird Charset NONE  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31768

13.11.2020 11:57, X11 пишет:
> Ну что это за бред, когда в одном поле таблицы куча кодировок?

не бред, а БАРДАК.

а бардак, как известно, автоматизировать нельзя! (С)

Posted via ActualForum NNTP Server 1.5

13 ноя 20, 12:18    [22231344]     Ответить | Цитировать Сообщить модератору
 Re: FireBird Charset NONE  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 12319
Есть две кодировки: кодировка подключения, которая говорит в какой кодировке данные будут поступать от клиента и в какой кодировке клиент ожидает данные от сервера. И кодировка поля, которая говорит в какой кодировке данные хранятся в этом поле. При общении с клиентом сервер занимается переконвертированием из одной в другую.

Кодировки OCTETS и NONE говорит, что конвертировать не нужно. Различия между ними такое
There are two specials character sets: NONE and OCTETS.
Both can be used in declarations but OCTETS can't be used in attachment.
They are very similar with the exception that space of NONE is ASCII 0x20 and space of OCTETS is 0x00.


Если у вас поле в базе в кодировке NONE, то вы на клиенте получаете просто набор байт, а как их конвертировать в строку - решайте сами
13 ноя 20, 12:32    [22231354]     Ответить | Цитировать Сообщить модератору
 Re: FireBird Charset NONE  [new]
cptngrb
Member

Откуда:
Сообщений: 618
Бардак, потому что проект древний и развивался долго. Одна программа писала в win1251, следующая в utf8, данных много, а может и по очереди
13 ноя 20, 13:32    [22231380]     Ответить | Цитировать Сообщить модератору
 Re: FireBird Charset NONE  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31768

13.11.2020 13:32, cptngrb пишет:
> Бардак, потому что проект древний и развивался долго. Одна программа писала в win1251, следующая в utf8, данных много, а может и по очереди

Картинка с другого сайта.

Posted via ActualForum NNTP Server 1.5

13 ноя 20, 13:38    [22231383]     Ответить | Цитировать Сообщить модератору
 Re: FireBird Charset NONE  [new]
alekcvp
Member

Откуда:
Сообщений: 2494
cptngrb
Бардак, потому что проект древний и развивался долго. Одна программа писала в win1251, следующая в utf8, данных много, а может и по очереди

Теперь вы знаете для чего нужны кодировки в БД 😁
13 ноя 20, 13:52    [22231394]     Ответить | Цитировать Сообщить модератору
 Re: FireBird Charset NONE  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 14759
Несколько вариантов решения проблемы.

При чтении научиться программно определять кодировку и использовать события Persistent-столбцов НД для чтения/сохранения данных.

Перелить все данные в новую базу, где будет однозначная кодировка. Придется писать свою утилиту.

Попробовать отфильтровать, отсортировать данные, чтобы разделить их как-то по кодировкам. В итоге с помощью экспорта/импорта и конвертации перелить данные в новую базу.
13 ноя 20, 14:02    [22231403]     Ответить | Цитировать Сообщить модератору
 Re: FireBird Charset NONE  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31768

Х11, не взлетит.

тут программист нужен (С)

Posted via ActualForum NNTP Server 1.5

13 ноя 20, 14:04    [22231405]     Ответить | Цитировать Сообщить модератору
 Re: FireBird Charset NONE  [new]
cptngrb
Member

Откуда:
Сообщений: 618
X11
При чтении научиться программно определять кодировку и использовать события Persistent-столбцов НД для чтения/сохранения данных.


так и сделал
13 ноя 20, 14:21    [22231420]     Ответить | Цитировать Сообщить модератору
 Re: FireBird Charset NONE  [new]
cptngrb
Member

Откуда:
Сообщений: 618
alekcvp
cptngrb
Бардак, потому что проект древний и развивался долго. Одна программа писала в win1251, следующая в utf8, данных много, а может и по очереди

Теперь вы знаете для чего нужны кодировки в БД 😁


Я знал, что нужно использовать одну, но в первый раз столкнулся с несколькими сразу
13 ноя 20, 14:38    [22231440]     Ответить | Цитировать Сообщить модератору
 Re: FireBird Charset NONE  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6409
cptngrb,

Эх.... Застрелите меня :( Ну как так можно-то?
14 ноя 20, 00:14    [22231807]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить