Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.68/47: Рейтинг темы: голосов - 47, средняя оценка - 4.68
mozymoz
1

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

13.03.2016, 18:36. Показов 9390. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.03.2016, 18:36
Ответы с готовыми решениями:

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

Изменить кодировку из utf-8 без bom в просто utf-8
формируется xls фаил в коде прописано...

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

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

29
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
14.03.2016, 13:22 2
какой-то непонятный кусок кода...
0
mozymoz
14.03.2016, 15:45 3
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 4
Цитата Сообщение от lmike
какой-то непонятный кусок кода...
добавлен код целиком
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 812
14.03.2016, 16:37 5
Скорее всего проблема в исходных данных - они не в той кодировке в которой ожидается.
Может быть они уже перекодированы и вы пытаетесь сделать это ещё раз?
0
mozymoz
14.03.2016, 18:35 6
Цитата Сообщение от garrick
Скорее всего проблема в исходных данных - они не в той кодировке в которой ожидается.
Может быть они уже перекодированы и вы пытаетесь сделать это ещё раз?
есть массив данных. и ошибка возникает на некоторых элементах массива. они не перекодированы. такой процедуры нигде не выполняется, только при экспорте.
mozymoz
14.03.2016, 18:40 7
Цитата Сообщение от garrick
Скорее всего проблема в исходных данных - они не в той кодировке в которой ожидается.
Может быть они уже перекодированы и вы пытаетесь сделать это ещё раз?
Ну разве что каким-то образом данные в документах в разных кодировках, то есть весь документ в другой кодировке. Потому что при экспорте на всех текстовых данных перекодировка выдает неправильные символы.

А как отследить кодировку?...
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
14.03.2016, 18:44 8
@URLEncode не задает кодировку http://www.ibm.com/support/knowledg...gner.domino.main.doc/H_URLENCODE.html?lang=ru , а преобразует "не безопасные" символы в их шестнадцатиричный вид
0
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 812
15.03.2016, 08:36 9
Цитата Сообщение от mazimaz
А как отследить кодировку?...
Вопрос очень непростой. Любой текстовый файл для компьютера просто набор байтов, определить складывается ли этот набор в какой-то осмысленный текст может только человек, визуально. Компьютеру для этого потребуется произвести какой-нибудь эвристический анализ полученного текста, да и то 100% гарантии нет никогда. Если бы вы точно знали, что первая строка файла всегда содержит определённую фразу, то это сильно бы упростило задачу анализа кодировки. Можно попробовать позаимствовать готовый модуль у Mozilla Mozilla Charset Detectors, написано на C++, предлагается в виде исходников или DLL библиотеки, есть порт на Java jChardet. Можно попробовать написать свой на Lotus Script, ознакомившись с теорией Автоматическое определение кодировки текста. Но, как я уже заметил ранее, 100% гарантии нет никогда. Поэтому люди и придумали XML - там в заголовке файла можно указать кодировку.
0
mozymoz
16.03.2016, 17:18 10
Цитата Сообщение от 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 11
у вас куча Mid и Left кот. "не нужны" есть ф-ция Replace ...
я так не увидел примера строки кот. подается на вход
для меня вовсе является загадкой ваша ф-ция (в обсуждаемом контексте) - она никак не управляет кодировкой
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
16.03.2016, 18:14 12
пример: @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 13
Цитата Сообщение от 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 14
и судя по исходному тексту - у вас 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 15
Цитата Сообщение от 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%D0%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%BB.%2C%2017
---------------------------
ОК
---------------------------


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

повторю - ф-ция (данная) НЕ ПРИ ЧЕМ
0
mozymoz
17.03.2016, 13:53 16
Цитата Сообщение от 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%D0%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%BB.%2C%2017
---------------------------
ОК
---------------------------
Текст скопирован с документа. Возможно при копировании произошли изменения?
Если их преобразовывать через @URLEncode на локальной машине, то результат тот, что вы показали.
Но если пускать это преобразование на сервере, и через поля документа - то результат разный. Собака зарыта в документе.
Что я делаю сейчас:
Если мне нужно все данные передать в oracle (а именно такая задача передо мной стоит), то в данной ситуации я не использую @URLEncode (потому что он не работает) а просто запускаю экспорт на локалке и жду пока отработает скрипт. Но это стыд программиста, нужно как-то автоматизировать процесс.
Попробую как-то подвязать ISO_8859-1, если есть варианты, что можно еще сделать - пишите. Усердно проверю все варианты.
Пока экпериментирую, но неудачно. Были попытки запустить на другом сервере агент. Но тоже безрезультатно.
Спасибо, что тратите на мою проблему свое время.
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
17.03.2016, 14:00 17
@mazimaz, я пытаюсь вам объяснить - вы ищите не там и код, кот. виноват не известен (вы его не выложили)


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

есть разные варианты лечения кодировки, но нужно знать источник её
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
17.03.2016, 14:24 18
вообще, с убитой кодировкой бороться можно
только у вас не LMBCS а ISO_8859-1
но вопрос - где "насрато" в кодировку
0
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 812
17.03.2016, 14:40 19
Ни разу не заморачивался с преобразованием кодировки при записи данных в Oracle. Вам оно точно надо? Без этого данные в Oraсle искажаются?
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
17.03.2016, 14:49 20
Цитата Сообщение от garrick
Ни разу не заморачивался с преобразованием кодировки при записи данных в Oracle. Вам оно точно надо? Без этого данные в Oraсle искажаются?
сильно подозреваю настройки ораклового сорца
и вопрос именно в коде, кот. мы так и не увидели
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2016, 14:49

Помощь в написании контрольных, курсовых и дипломных работ здесь.

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.