powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
25 сообщений из 115, страница 3 из 5
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732314
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисIBExpert,
ах вон оно что. Ну да если там, то всё нормально
Код: sql
1.
2.
3.
4.
5.
6.
EXECUTE BLOCK
AS
    DECLARE VARIABLE MSG VARCHAR(200) = 'Привет ';
BEGIN
  EXCEPTION E_CUSTOM_ERROR cast(:msg || 'Мир' as varchar(200) CHARACTER set utf8);
END

работает, но если блок или процедура возвращает result set, то уже показывается окошко как у rdb_dev и там кракозябрыДа, "бла-бла" отображается корректно, но не в MessageBox'е, а в окошке сообщений и притом, что это неселективная ХП.
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732319
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИХМО этот простой messagebox надо бы переделать на окно вывода ошибки в более структурированном виде. С выводом SQLSTATE, SQLCODE, GDSCODE, наименованием exception, если оно есть и выводом текста исключения в прокручиваемый мемо. В этот же диалог можно добавить и кнопку переключения в utf8 отображения или жёстко автоматом конвертировать если коннект utf8
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732338
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подытожу:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SET TERM ^;
CREATE OR ALTER PROCEDURE TEST__SP
  RETURNS
  (
    tmstmp TIMESTAMP
  )
AS
--  DECLARE VARIABLE msg VARCHAR(1023) CHARACTER SET UTF8 DEFAULT 'Бла-';
-- Работает с кракозябрами в MessageBox'е

  DECLARE VARIABLE msg VARCHAR(1023) CHARACTER SET WIN1251 DEFAULT 'Бла-';
-- Если "EXCEPTION my_exception Cast(:msg AS VARCHAR(1023) CHARACTER SET NONE)"
-- Результат: Malformed string
-- Если "EXCEPTION my_exception Cast(:msg AS BLOB CHARACTER SET NONE)"
-- Результат: Бла-бла при кодировке по умолчанию WIN1251 на ОС клиента
BEGIN
  msg = msg || 'бла';
  EXCEPTION my_exception Cast(:msg AS BLOB CHARACTER SET NONE);
  tmstmp = CURRENT_TIMESTAMP;
  SUSPEND;
END^
SET TERM ;^
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732342
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При этом, "Бла-бла" на клиенте в MessageBox'е отображается корректно независимо от кодировки подключения (WIN1251 или UTF8), но при условии, что кодировка по умолчанию для ОС клиента WIN1251.
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732349
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

проще Алексадра попросить, чтобы он в диалоге вывода ошибки учитывал чарсет коннекта. А уж в своей программе сам как нибудь.
Все эти изобретения с BLOB конвертацией гавнокод
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732421
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, если бы дело было только в IBExpert, я бы с тобой согласился, но в isql ситуация не лучше...
При смене кодировки консоли cmd - "chcp 65001" даже если использовать в isql "set names utf8;" выдаётся только первый символ строки исключения. Приходится использовать кодовую страницу консоли cp1251 - "chcp 1251", чтобы isql, при "set names utf8;", перекодировал utf8 в win1251, но в этом случае, если мы в EXCEPTION пихаем строку utf8, она также выдается кракозябрами и также, как и в случае с IBExpert, спасает приведение к BLOB CHARACTER SET NONE. Результат примера без приведения к BLOB:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
C:\Windows\System32>chcp 1251
Текущая кодовая страница: 1251

C:\Windows\System32>isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> CONNECT "127.0.0.1:test_db" USER sysdba PASSWORD masterke;
Database:  "127.0.0.1:test_db", User: sysdba
SQL> set sql dialect 3;
SQL> set names utf8;
SQL> SELECT * FROM TEST__SP;

                   TMSTMP
=========================
Statement failed, SQLSTATE = HY000
exception 3
-MY_EXCEPTION
-Бла-бла
-At procedure 'TEST__SP' line: 9, col: 3
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732424
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисработает, но если блок или процедура возвращает result set, то уже показывается окошко как у rdb_dev и там кракозябры

Про модальное окошко то я забыл.
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732427
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devПриходится использовать кодовую страницу консоли cp1251 - "chcp 1251", чтобы isql, при "set names utf8;", перекодировал utf8 в win1251isql - перекодировал ? OMG
Давай ещё
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732430
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad, а "кто" перекодировал? Если кодовая страница консоли cmd - 1251, а в isql прописано "set names utf8", то кто именно занимается конвертацией WIN1251->UTF8, при отправке запроса на сервер, и обратной конвертацией - при получении результата?
Код: plaintext
1.
2.
3.
4.
SQL> SELECT 'Тестовое сообщение' FROM oneRow;

CONSTANT
==================
Тестовое сообщение
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732435
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

твоё set names после коннекта - до лампочки
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732438
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad, да, я уже понял. Надо делать "isql -ch utf8"
Код: plaintext
1.
2.
3.
4.
SQL> SELECT 'Тестовое сообщение' FROM oneRow;
Statement failed, SQLSTATE = 22000
Dynamic SQL Error
-SQL error code = -104
-Malformed string
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732439
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

про SET NAMES ты конечно же пропустил мимо ушей
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732449
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, в смысле "пропустил мимо ушей"?
Берем самый простой пример со строкой исключения в UTF8:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SET TERM ^;
CREATE OR ALTER PROCEDURE TEST__SP
  RETURNS
  (
    tmstmp TIMESTAMP
  )
AS
  DECLARE VARIABLE msg VARCHAR(1023) CHARACTER SET UTF8 DEFAULT 'Бла-';
BEGIN
  EXCEPTION my_exception :msg || 'бла';
  tmstmp = CURRENT_TIMESTAMP;
  SUSPEND;
END^
SET TERM ;^

Если у нас в cmd кодовая страница 1251 (chcp 1251), то при запуске isql без каких-либо параметров командной строки получаем:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
C:\Windows\System32>isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> CONNECT "127.0.0.1:test_db" USER sysdba PASSWORD masterke;
Database:  "127.0.0.1:test_db", User: sysdba
SQL> set sql dialect 3;
SQL> SELECT * FROM TEST__SP;

                   TMSTMP
=========================
Statement failed, SQLSTATE = HY000
exception 3
-MY_EXCEPTION
-Бла-бла
-At procedure 'TEST__SP' line: 9, col: 3

Но если запускаем как "isql -ch win1251", получаем то, что нужно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
C:\Windows\System32>isql -ch win1251
Use CONNECT or CREATE DATABASE to specify a database
SQL> CONNECT "127.0.0.1:test_db" USER sysdba PASSWORD masterke;
Database:  "127.0.0.1:test_db", User: sysdba
SQL> set sql dialect 3;
SQL> SELECT * FROM TEST__SP;

                   TMSTMP
=========================
Statement failed, SQLSTATE = HY000
exception 3
-MY_EXCEPTION
-Бла-бла
-At procedure 'TEST__SP' line: 9, col: 3
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732453
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё!... Всем спасибо!
Вопрос к разработчикам снят. Остался только вопрос к Александру - почему в MessageBox'е IBExpert'а кракозябры? :)
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732454
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devПри смене кодировки консоли cmd - "chcp 65001" даже если использовать в isql "set names utf8;" выдаётся только первый символ строки исключения.Это бага виндового рантайма. Старая и, вроде, вполне общеизвестная.Приходится использовать кодовую страницу консоли cp1251 - "chcp 1251", чтобы isql, при "set names utf8;"А это бага пользователя - кодировка подключения обязана соответствовать кодировке консоли:
Код: plaintext
1.
 chcp 1251
 isql -ch WIN1251 ...
и никаких сус..., тьфу, UTF8.
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732455
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

ну вот всё работает с utf8

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
d:\fb\fb40>chcp 65001
Active code page: 65001

d:\fb\fb40>isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> set names utf8;
SQL> connect 'inet4://localhost/test' user SYSDBA password 'masterkey';
Database: 'inet4://localhost/test', User: SYSDBA
SQL> SELECT * FROM TEST__SP;

                   TMSTMP
=========================
Statement failed, SQLSTATE = HY000
exception 2
-MY_EXCEPTION
-Бла-бла
-At procedure 'TEST__SP' line: 9, col: 3
SQL>

так что проблема в обработке исключения на стороне клиентского приложения. IBExpert у себя исправит, а ты в своём приложении сам разгребай. Не надо через конвертацию в BLOB делать, это криво
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732456
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

ну может в XP. У меня на Win7 всё нормально отработало. В конце концов можно и PowerShell для извращенцев запустить
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732461
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисBasil A. Sidorov,

ну может в XP. У меня на Win7 всё нормально отработало. В конце концов можно и PowerShell для извращенцев запуститьУ меня тоже Win7 Pro SP1 лицуха, но мне не повезло:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
C:\Windows\System32>chcp 65001
Active code page: 65001

C:\Windows\System32>isql -ch utf8
Use CONNECT or CREATE DATABASE to specify a database
SQL> CONNECT "127.0.0.1:test_db" USER sysdba PASSWORD masterke;
Database:  "127.0.0.1:test_db", User: sysdba
SQL> set sql dialect 3;
SQL> SELECT * FROM TEST__SP;

                   TMSTMP
=========================
Statement failed, SQLSTATE = HY000
exception 3
-MY_EXCEPTION
-Р
-At procedure 'TEST__SP' line: 9, col: 3

Симонов Денистак что проблема в обработке исключения на стороне клиентского приложения. IBExpert у себя исправит, а ты в своём приложении сам разгребай. Не надо через конвертацию в BLOB делать, это кривоЯ уже понял, что проблема была в IBExpert, а не в сервере и клиенте FirebirdSQL и что через BLOB делать не надо.
Просто с этими кодировками не сразу и поймёшь - откуда у проблемы ноги растут.
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732462
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисну может в XP. У меня на Win7 всё нормально отработало.

Вывод - работает нормально. Ввод с клавиатуры - завершает программу на первой нелатинской
букве.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732463
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devЯ уже понял, что проблема была в IBExpert

Да охренеть...
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732464
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисну может в XP.Я вас умоляю ...У меня на Win7 всё нормально отработало. В конце концов можно и PowerShell для извращенцев запустить"Не хватает памяти" на скриншоте "мощной точки" - стенания more, который не в состоянии "прожевать" UTF8.
ISQ из-за всё того же бага просто молча завершается.
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732467
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

нынче в win10 уже можно и через bash запускать (linux subsytem on windows). Попробовал. Ничего так. Работоспособно
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732472
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertrdb_devЯ уже понял, что проблема была в IBExpert

Да охренеть...Ладно, пусть будет не "проблема", а "временная трудность". :)
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732479
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devЛадно, пусть будет не "проблема", а "временная трудность". :)

В эксперте с этим трудностей нет, utf8 он детектировать умеет. Только в твой-то клиент все равно "кракозябры" прилетят, которые тебе эксперт в том модальном окошке показывает.
А эксперт вовсе не обязан конвертировать текст эксепшена в чарсет коннекта. Там что угодно может прилететь, в том числе то, что в чарсет коннекта сконвертировать невозможно.
...
Рейтинг: 0 / 0
напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
    #39732485
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

мда... я был о powershell лучшего мнения. Ну я даже не знаю. Изобрели его вроде как 2006 году. Как можно до сих пор не поддерживать нормально Unicode
...
Рейтинг: 0 / 0
25 сообщений из 115, страница 3 из 5
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / напомните, плз, в каком CHARSET'е выплёвывается сообщение EXCEPTION - UNICODE_FSS?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]