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

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

13.03.2016, 18:36. Показов 12274. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru