powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Чудеса кодировки?
22 сообщений из 22, страница 1 из 1
Чудеса кодировки?
    #39832510
shadow432
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, ткните пальцем пожалуйста, уже сил нету.

Имеем файл с платежами с кучей строк формата

Пупкин Сергей Николаевич|РОССИЯ, 399446, Липецкая обл, Добринский р-н, Мухосранск ул, дом № 1, квартира |020000001|130.00|012018|0.00||4272395|30.01.2018

Каждая в отдельной строке
Файл имеет кодировку 20866 (koi8-r).
В процедуре UTL_FILE-ом открываю файл не чтение и начинаю читать по одной строке (пример строки выше). Далее эту строку парсю на нужные мне поля. И тут начинаются чудеса. При попытке прочитать третье поле (лицевой счет), читается поле 4 (сумма). Ниже пример из окна тестирования. Причем если копирую эту строку в обычное SQL окно все корректно отрабатывает(пример тоже ниже). Причем этот глюк не со всеми строками. Закономерности так и не нашел. В FAR-е просмотрел все строки, ни каких "левых" символов не увидел.
Если в рукопашную изменяю кодировку файла на UTF8, то все корректно отрабатывает.
Сам понимаю что проблема в кодировке, но как победить без ручного вмешательства не понимаю. Подскажите пожалуйста в какую сторону копать и как обойти это безобразие?

Кодировка базы
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_CHARACTERSET AL32UTF8
...
Рейтинг: 0 / 0
Чудеса кодировки?
    #39832512
shadow432
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мелко, глаза сломаешь. Продублирую
...
Рейтинг: 0 / 0
Чудеса кодировки?
    #39832529
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shadow432,

Utl_file умеет работать только с текстами в кодировке БД. Функция convert тоже.
...
Рейтинг: 0 / 0
Чудеса кодировки?
    #39832562
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Utl_file умеет работать только с текстами в кодировке БД."с текстами только"

shadow432Сам понимаю что проблема в кодировке, но как победить без ручного вмешательства не понимаю.RTFM utl_file.get_raw / bfile
...
Рейтинг: 0 / 0
Чудеса кодировки?
    #39832564
shadow432
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-shadow432,

Utl_file умеет работать только с текстами в кодировке БД. Функция convert тоже.



Значит единственный вариант это менять кодировку файла до открытия UTL_FILE-ом? Или все же можно прочитать, а потом работать с кодировкой? И тем не менее мне не понятно. В окне тестирования PL/SQL я ведь вижу корректный текст и в обычном SQL запросе REGEXP_SUBSTR работает корректно с этой же строкой.
...
Рейтинг: 0 / 0
Чудеса кодировки?
    #39832572
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shadow432Значит единственный вариант это менять кодировку файла до открытия UTL_FILE-омЕсть несколько вариантов. Наиболее напрашивающийся - внешняя таблица.

shadow432В окне тестирования PL/SQL я ведь вижу корректный текствидимая корректность может быть обусловлена кратностью ошибок.
...
Рейтинг: 0 / 0
Чудеса кодировки?
    #39832574
shadow432
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-shadow432Значит единственный вариант это менять кодировку файла до открытия UTL_FILE-омЕсть несколько вариантов. Наиболее напрашивающийся - внешняя таблица.

shadow432В окне тестирования PL/SQL я ведь вижу корректный текствидимая корректность может быть обусловлена кратностью ошибок.


С внешними таблицами тоже засада. Сразу не написал об этом. В общем у меня 3 разных типа файлов для загрузки. У них разные разделители и разные кодировки (win1251, utf8, 20866)
...
Рейтинг: 0 / 0
Чудеса кодировки?
    #39832777
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-только с текстами в кодировке БД. Функция convert тоже .
Ммм?
...
Рейтинг: 0 / 0
Чудеса кодировки?
    #39832778
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shadow432С внешними таблицами тоже засада. Сразу не написал об этом. В общем у меня 3 разных типа файлов для загрузки. У них разные разделители и разные кодировки (win1251, utf8, 20866)
Не томите уже, в чем засада с внешними таблицами?
...
Рейтинг: 0 / 0
Чудеса кодировки?
    #39832807
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous-2-только с текстами в кодировке БД. Функция convert тоже .
Ммм? 20958431
19496174
...
Рейтинг: 0 / 0
Чудеса кодировки?
    #39832814
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous-2-только с текстами в кодировке БД. Функция convert тоже .Ммм?convertThe return value of CONVERT has a character data type, so it should be either in the database character set or in the national character set, depending on the data type. Any dest_char_set that is not one of these two character sets is unsupported. The char argument and the source_char_set have the same requirements.
...
Рейтинг: 0 / 0
Чудеса кодировки?
    #39832846
shadow432
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymousshadow432С внешними таблицами тоже засада. Сразу не написал об этом. В общем у меня 3 разных типа файлов для загрузки. У них разные разделители и разные кодировки (win1251, utf8, 20866)
Не томите уже, в чем засада с внешними таблицами?


Времени не было посмотреть. Засада в том что имеем 3 типа файлов с разными разделителями и кодировками. Да в общем то наверное и не засада. Туплю. Просто нужно будет создать отдельную ВТ для каждого типа. А с кодировками проблем не будет?
...
Рейтинг: 0 / 0
Чудеса кодировки?
    #39832856
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-andrey_anonymousпропущено...
Ммм?convertThe return value of CONVERT has a character data type, so it should be either in the database character set or in the national character set, depending on the data type. Any dest_char_set that is not one of these two character sets is unsupported. The char argument and the source_char_set have the same requirements.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
with t as (
select 'Съешь-ка еще этих мягких французских булочек, да выпей-ка чаю' s_db_cs, regexp_substr(sys_context('userenv','LANGUAGE'),'\.(.*)',1,1,null,1) db_cs from dual
)
, t2 as (
select db_cs
     , s_db_cs
     , convert(s_db_cs,'RU8PC866') s_ru8pc866
     , convert(s_db_cs,'CL8ISO8859P5') s_iso8859_5
     , convert(s_db_cs,'AL32UTF8') s_utf8
from t)
select db_cs
     , s_db_cs
     , s_ru8pc866
     , convert(s_ru8pc866, db_cs, 'RU8PC866') s_ru8pc866_to_db_cs
     , s_iso8859_5
     , convert(s_iso8859_5, db_cs, 'CL8ISO8859P5')  s_iso8859_5_to_db_cs
     , s_utf8
     , convert(s_utf8, db_cs, 'AL32UTF8')  s_utf8_to_db_cs
from t2     
;

DB_CS        S_DB_CS         S_RU8PC866      S_RU8PC866_TO_D S_ISO8859_5     S_ISO8859_5_TO_ S_UTF8          S_UTF8_TO_DB_CS
------------ --------------- --------------- --------------- --------------- --------------- --------------- ---------------
CL8MSWIN1251 Съешь-ка еще эт ‘кҐим-Є  ҐйҐ нв Съешь-ка еще эт БкХим-ЪР ХйХ нв Съешь-ка еще эт Съешь-РєР° Съешь-ка еще эт
             их мягких франц Ёе ¬пЈЄЁе да ­ж их мягких франц Ше ЬпУЪШе даРЭж их мягких франц  еще СЌС‚РёС их мягких франц
             узских булочек, г§бЄЁе Ўг«®зҐЄ, узских булочек, гЧбЪШе СгЫЮзХЪ, узских булочек, … РјСЏРіРєРёС…  узских булочек,
              да выпей-ка ча  ¤  ўлЇҐ©-Є  з   да выпей-ка ча  ФР ТлЯХЩ-ЪР зР  да выпей-ка ча С„СЂР°РЅС†СѓР·С  да выпей-ка ча
             ю               о               ю               о               ю               ЃРєРёС… булРю
                                                                                             ѕС‡РµРє, РґР° Р 
                                                                                             ІС‹РїРµР№-РєР°  
                                                                                             чаю          
...
Рейтинг: 0 / 0
Чудеса кодировки?
    #39832868
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Код: plsql
1.
2.
3.
DB_CS
------------
CL8MSWIN1251

Вот корень заблуждений. Все однобайтовые последовательности байт допустимы, что создаёт иллюзию "рабочести".
...
Рейтинг: 0 / 0
Чудеса кодировки?
    #39832924
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicВот корень заблуждений.
:)
...
Рейтинг: 0 / 0
Чудеса кодировки?
    #39833118
Als1973
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А кто мешает файлы сначала в уникод перегонять, а потом заливать?
...
Рейтинг: 0 / 0
Чудеса кодировки?
    #39833122
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Als1973А кто мешаетТогда уж - кто мешает данные непосредственно в систему вводить.
Als1973перегонятьУмножение сущностей усложняет сопровождение.
...
Рейтинг: 0 / 0
Чудеса кодировки?
    #39833138
Als1973
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

Какие сущности? Простое условие, система принимает данные в уникод. Всё. Завтра тебе на китайском принесут, будем хранимку опять переделывать?
...
Рейтинг: 0 / 0
Чудеса кодировки?
    #39833152
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Als1973Какие сущности?Узость мышления не позволяет тебе правильно интерпретировать фразу "умножение сущностей".
Als1973на китайскомКитайская кодировка?Als1973будем хранимку опять переделыватьМне проще переделать sql-код, чем "перегонять".
...
Рейтинг: 0 / 0
Чудеса кодировки?
    #39833431
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Als1973Какие сущности? Простое условие, система принимает данные в уникод. Всё.Дебилы вполне могут допускать, что все должны подстраиваться под их миронедоощущение. И кончают соответственно.
...
Рейтинг: 0 / 0
Чудеса кодировки?
    #39833662
Als1973
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

Один мальчик писал все на JavaScript PL/SQL, и клиент, и сервер, говорил что нравится, удобно, читабельно. Потом его в дурку забрали, конечно. (c)
...
Рейтинг: 0 / 0
Чудеса кодировки?
    #39833667
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Als1973Потом его в дурку забрали, конечно. (c)Лично тебе эта история помогла включить мозг?
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Чудеса кодировки?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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