Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/64: Рейтинг темы: голосов - 64, средняя оценка - 4.72
mozymoz

Проблема при переводе в кодировку utf-8

13.03.2016, 18:36. Показов 12264. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
У меня возникла проблема при переводе текста в кодировку UTF-8.
Ранее функция работала без сбоев, но недавно что-то в ней сломалось и функция начала выдавать обработанные данные в виде ???µ????????, 49 ?????°?????µ?????????? ?????????·???? ???».
Функция используется при передаче данных в oracle.
Данные - текстовые, обычный список адресов.
Сбоит как-то хаотично, нельзя определить на что именно функция выдает кракозяблы.

Dim res As Variant
Dim stF As String
stF = { @URLEncode("UTF-8"; "} + st + {") }
res = Evaluate( stF )
transl= res (0)

Помогите, может у кого-то была подобная проблема.
Спасибо.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.03.2016, 18:36
Ответы с готовыми решениями:

XmlSerializer.Serialize() как поменять кодировку с UTF-16 на UTF-8
Задача серилизовать объект в string, но с кодировкой UTF-8. подзадача - как представить строку как Stream? // VALIDATE ...

Изменить кодировку из utf-8 без bom в просто utf-8
формируется xls фаил в коде прописано response.setContexType("application/vnd.ms-excel;charset=UTF-8" в эксел документе отображается...

Можно ли изменить кодировку Windows-1251 на Utf-8 при помощи Cmd.exe?
В бух.7.7 создал файл.txt, нужно сохранить его в utf-8. Средства 1с77 позволяют менять кодовую страницу только WIN либо DOS. Можно ли...

29
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
14.03.2016, 13:22
какой-то непонятный кусок кода...
0
mozymoz
14.03.2016, 15:45
LotusScript
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
32
33
Function Translit( st ) As String
Dim Result As Variant
Dim stFormula As String
Dim pos, i As Integer
Dim ch, chNext As String
While InStr( st, Chr(92) ) > 0
pos = InStr( st, Chr(92) )
st = Left( st, pos-1 ) + "~" + Mid( st, pos + 1, 99999)
Wend
 
While InStr( st, {"} ) > 0 --- kill "
pos = InStr( st, {"} )
st = Left( st, pos-1 ) + "~" + Mid( st, pos + 1, 99999)
Wend
 
While InStr( st, {} ) > 0 --- kill "
pos = InStr( st, {} )
st = Left( st, pos-1 ) + "`" + Mid( st, pos + 1, 99999)
Wend
 
For i = 1 To Len(st)-1
ch = Mid( st, i, 1)
chNext = Mid( st, i+1, 1)
If ch = Chr(92) Then
If chNext<>Chr(92) Then st = Left( st, i ) + "\" + Mid( st, i + 1, 99999)
i = i + 1
End If
Next
 
stFormula = { @URLEncode("UTF-8"; "} + st + {") }
result = Evaluate( stFormula )
Translit = result(0)
End Function
вот функция целиком.
но проблема наверное не в функции..
mozymoz
14.03.2016, 15:54
Цитата Сообщение от lmike
какой-то непонятный кусок кода...
добавлен код целиком
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 812
14.03.2016, 16:37
Скорее всего проблема в исходных данных - они не в той кодировке в которой ожидается.
Может быть они уже перекодированы и вы пытаетесь сделать это ещё раз?
0
mozymoz
14.03.2016, 18:35
Цитата Сообщение от garrick
Скорее всего проблема в исходных данных - они не в той кодировке в которой ожидается.
Может быть они уже перекодированы и вы пытаетесь сделать это ещё раз?
есть массив данных. и ошибка возникает на некоторых элементах массива. они не перекодированы. такой процедуры нигде не выполняется, только при экспорте.
mozymoz
14.03.2016, 18:40
Цитата Сообщение от garrick
Скорее всего проблема в исходных данных - они не в той кодировке в которой ожидается.
Может быть они уже перекодированы и вы пытаетесь сделать это ещё раз?
Ну разве что каким-то образом данные в документах в разных кодировках, то есть весь документ в другой кодировке. Потому что при экспорте на всех текстовых данных перекодировка выдает неправильные символы.

А как отследить кодировку?...
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
14.03.2016, 18:44
@URLEncode не задает кодировку http://www.ibm.com/support/knowledg...gner.domino.main.doc/H_URLENCODE.html?lang=ru , а преобразует "не безопасные" символы в их шестнадцатиричный вид
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 812
15.03.2016, 08:36
Цитата Сообщение от mazimaz
А как отследить кодировку?...
Вопрос очень непростой. Любой текстовый файл для компьютера просто набор байтов, определить складывается ли этот набор в какой-то осмысленный текст может только человек, визуально. Компьютеру для этого потребуется произвести какой-нибудь эвристический анализ полученного текста, да и то 100% гарантии нет никогда. Если бы вы точно знали, что первая строка файла всегда содержит определённую фразу, то это сильно бы упростило задачу анализа кодировки. Можно попробовать позаимствовать готовый модуль у Mozilla Mozilla Charset Detectors, написано на C++, предлагается в виде исходников или DLL библиотеки, есть порт на Java jChardet. Можно попробовать написать свой на Lotus Script, ознакомившись с теорией Автоматическое определение кодировки текста. Но, как я уже заметил ранее, 100% гарантии нет никогда. Поэтому люди и придумали XML - там в заголовке файла можно указать кодировку.
0
mozymoz
16.03.2016, 17:18
Цитата Сообщение от lmike
@URLEncode не задает кодировку http://www.ibm.com/support/knowledg...gner.domino.main.doc/H_URLENCODE.html?lang=ru , а преобразует "не безопасные" символы в их шестнадцатиричный вид
Замечена особенность: одна и та же функция в агенте и в библиотеке отрабатывает по-разному.
Почему такое может быть?
При чем если в библиотеке функция, то она пишет кракозяблы для все документов в экспорте.
А если в агенте - только на некоторые.

Может ли еще быть проблема в том, что lotus поднят на linux?
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
16.03.2016, 18:07
у вас куча Mid и Left кот. "не нужны" есть ф-ция Replace ...
я так не увидел примера строки кот. подается на вход
для меня вовсе является загадкой ваша ф-ция (в обсуждаемом контексте) - она никак не управляет кодировкой
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
16.03.2016, 18:14
пример: @Prompt([OK];"Info";@URLEncode("UTF-8";"бе-бе-бе"))
---------------------------
Info
---------------------------
%D0%B1%D0%B5-%D0%B1%D0%B5-%D0%B1%D0%B5
---------------------------
ОК
---------------------------


--- Добавлено 17 мар 2016. Первое сообщение размещено 17 мар 2016 ---

т.е. мы получаем (как написано в хэлпе) - 16ричное представление символов (кот. не ASCII и кот. "не безопасны")


--- Добавлено 17 мар 2016 ---

напишите процесс - чего берете, куда суете, чего получаете


--- Добавлено 17 мар 2016 ---

еще раз акцентирую внимание: @URLEncode не занимается кодировкой ВАЩЕ


--- Добавлено 17 мар 2016 ---




Цитата Сообщение от mazimaz
Может ли еще быть проблема в том, что lotus поднят на linux?
домино - вы хотели сказать - только лучше работать будет ;)
а вот сервисы к кот. вы обращаетесь и локаль имеют важное значение
0
mozymoz
16.03.2016, 18:14
Цитата Сообщение от lmike
пример: @Prompt([OK];"Info";@URLEncode("UTF-8";"бе-бе-бе"))
---------------------------
Info
---------------------------
%D0%B1%D0%B5-%D0%B1%D0%B5-%D0%B1%D0%B5
---------------------------
ОК
---------------------------


--- Добавлено 17 мар 2016. Первое сообщение размещено 17 мар 2016 ---

т.е. мы получаем (как написано в хэлпе) - 16ричное представление символов (кот. не ASCII и кот. "не безопасны")


--- Добавлено 17 мар 2016 ---

напишите процесс - чего берете, куда суете, чего получаете


--- Добавлено 17 мар 2016 ---

еще раз акцентирую внимание: @URLEncode не занимается кодировкой ВАЩЕ


--- Добавлено 17 мар 2016 ---

домино - вы хотели сказать - только лучше работать будет ;)
а вот сервисы к кот. вы обращаетесь и локаль имеют важное значение
Вот пример двух записей.

ADDRESS
Не попадает: Склад, Киев, Глубочицкая ул., 17
Попадает: Склад, Киев, Глубочицкая ул., 17
Адрес в итоге преобразовывается в первом случае в символы а во втором - нормально.
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
16.03.2016, 18:33
и судя по исходному тексту - у вас ISO кодировка прет как utf-8
вот подтверждение в линуховой консоли:


echo "???µ??????, 49 ????°????µ????????? ?????????·???? ??»." | iconv -f utf-8 -t ISO_8859-1
Херсон, 49 Гвардейской дивизии ул.



--- Добавлено 17 мар 2016. Первое сообщение размещено 17 мар 2016 ---

др. словами - вам отдают ISO_8859-1 , а вы ожидаете utf-8
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
17.03.2016, 13:44
Цитата Сообщение от mazimaz
Вот пример двух записей.

ADDRESS
Не попадает: Склад, Киев, Глубочицкая ул., 17
Попадает: Склад, Киев, Глубочицкая ул., 17
Адрес в итоге преобразовывается в первом случае в символы а во втором - нормально.
не верю, вот второй:
---------------------------
Info
---------------------------
%D0%9F%D0%BE%D0%BF%D0%B0%D0%B4%D0%B0%D0% B5%D1%82%3A%20%D0%A1%D0%BA%D0%BB%D0%B0%D 0%B4%2C%20%D0%9A%D0%B8%D0%B5%D0%B2%2C%20 %D0%93%D0%BB%D1%83%D0%B1%D0%BE%D1%87%D0% B8%D1%86%D0%BA%D0%B0%D1%8F%20%D1%83%D0%B B.%2C%2017
---------------------------
ОК
---------------------------


--- Добавлено 18 мар 2016. Первое сообщение размещено 18 мар 2016 ---

повторю - ф-ция (данная) НЕ ПРИ ЧЕМ
0
mozymoz
17.03.2016, 13:53
Цитата Сообщение от lmike
не верю, вот второй:
---------------------------
Info
---------------------------
%D0%9F%D0%BE%D0%BF%D0%B0%D0%B4%D0%B0%D0% B5%D1%82%3A%20%D0%A1%D0%BA%D0%BB%D0%B0%D 0%B4%2C%20%D0%9A%D0%B8%D0%B5%D0%B2%2C%20 %D0%93%D0%BB%D1%83%D0%B1%D0%BE%D1%87%D0% B8%D1%86%D0%BA%D0%B0%D1%8F%20%D1%83%D0%B B.%2C%2017
---------------------------
ОК
---------------------------
Текст скопирован с документа. Возможно при копировании произошли изменения?
Если их преобразовывать через @URLEncode на локальной машине, то результат тот, что вы показали.
Но если пускать это преобразование на сервере, и через поля документа - то результат разный. Собака зарыта в документе.
Что я делаю сейчас:
Если мне нужно все данные передать в oracle (а именно такая задача передо мной стоит), то в данной ситуации я не использую @URLEncode (потому что он не работает) а просто запускаю экспорт на локалке и жду пока отработает скрипт. Но это стыд программиста, нужно как-то автоматизировать процесс.
Попробую как-то подвязать ISO_8859-1, если есть варианты, что можно еще сделать - пишите. Усердно проверю все варианты.
Пока экпериментирую, но неудачно. Были попытки запустить на другом сервере агент. Но тоже безрезультатно.
Спасибо, что тратите на мою проблему свое время.
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
17.03.2016, 14:00
@mazimaz, я пытаюсь вам объяснить - вы ищите не там и код, кот. виноват не известен (вы его не выложили)


--- Добавлено 18 мар 2016. Первое сообщение размещено 18 мар 2016 ---

есть разные варианты лечения кодировки, но нужно знать источник её
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
17.03.2016, 14:24
вообще, с убитой кодировкой бороться можно
только у вас не LMBCS а ISO_8859-1
но вопрос - где "насрато" в кодировку
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 812
17.03.2016, 14:40
Ни разу не заморачивался с преобразованием кодировки при записи данных в Oracle. Вам оно точно надо? Без этого данные в Oraсle искажаются?
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
17.03.2016, 14:49
Цитата Сообщение от garrick
Ни разу не заморачивался с преобразованием кодировки при записи данных в Oracle. Вам оно точно надо? Без этого данные в Oraсle искажаются?
сильно подозреваю настройки ораклового сорца
и вопрос именно в коде, кот. мы так и не увидели
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.03.2016, 14:49
Помогаю со студенческими работами здесь

Проблема при переводе из XMLGregorianCalendar в Date
Делаю SOAP запрос. Получаю объект. В нём есть поле типа XMLGregorianCalendar. Нужно его перевести в Date. Делаю так: Date date = null; ...

Возникла проблема при переводе из арабских чисел в римские
print(&quot;Арабские в римские&quot;) ch = int(input(&quot;Введите число: &quot;)) if ch == 1: print(&quot;Ваше число: I&quot;) elif ch == 2: ...

Как создать рабочий XML в UTF-8? У меня исправно создаётся Windows-1251, но с UTF-8 проблема
Доброго дня, форумчане. Подскажите, что делать, чтобы создавался и открывался без ошибок XML-файл? Сейчас у меня такой код и если...

Поменять кодировку на utf 8
Не подскажете как поменять кодировку на utf 8? Не могу избавиться от иероглифов. &lt;?php // This file is a part of com_tptabber...

Не могу поменять кодировку на UTF-8 (?)
Код не могу кинуть так как не знаю где точно оно меняется, нашел engine\data\config.php и dbconfig.php часть сайта нормальна стала часть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru