Принятые Данные Из Вне - Крокозябры

Тема в разделе "Lotus - Программирование", создана пользователем dimat, 8 окт 2014.

  1. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Всем привет!
    Есть агент, на который постом отправляется xml документ, все отлично принимается, но русские буквы приходят вот в таком виде (вернее отображаются в сохраненном доке): ðÜÐÇð░Ðüð¢ð¥ð .
    кот агента:

    Код (Text):
        Set ns=New NotesSession
    Set db=ns.currentdatabase
    Dim pdoc As NotesDocument
    Set pdoc=ns.Documentcontext
    pdoc.form="REQUEST_CONTENT"
    Call pdoc.Save(True,False)
    Со стороны отправителя говорят что отправляют в UTF-8, попробовал содержимое поля REQUEST_CONTENT загнать в NotesStream и посмотреть Charset - Unicode.
    Почему так отображаются русские символы, что можно сделать?

    Скрин открытого документа в форме:
    2014_10_08_09_42_45_Скриншот_экрана.png
     
  2. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Судя по всему либо клиент, либо сервер это воспринимает как Windows-1250
    А сам файл нормально открывается?
     
  3. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    в файл не сохранял, просто Documentcontext указал форму и сохранил. сейчас попробуй в файл сохранить содержимое поля REQUEST_CONTENT
     
  4. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Если есть желание "упороться" и написать свое, то Unicode encode-decode
     
  5. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    записал содержимое в файл - вместо русских символов знаки вопроса
     
  6. ty3uk

    ty3uk Well-Known Member

    Регистрация:
    31 мар 2008
    Сообщения:
    169
    Симпатии:
    0
    блин, вроде подобное было, тока не помню как исправлял, толи жёстко менял кодировку на вебе (в настройках сайта), толи в хпагесах что-то делал. Не помню.
     
  7. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    сохранение в файл - надо указывать кодировку, иначе (в виндятке) используется вин1251
    юникод тоже бывает разный UTF-8 (этот в *nix), UTF-16 (этот юзает виндятко) ...
    если пытаться смотреть результат хмл из потока (в нотусне), без обработки (например через майм) - будут кракозябры (ибо оно хочет для платформы казать и пытается 1251)
     
  8. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    в файл мне не надо сохранять, в дальнейшем сохранять вобще никуда не надо, нужно принять этот xml и обработать. сейчас сохраняю в нотесдок только для отладки
     
  9. Serduko

    Serduko Well-Known Member

    Регистрация:
    11 окт 2011
    Сообщения:
    174
    Симпатии:
    0
    Делайте агент на Java, тогда проблем с кодировкой не будет.

    А так через майм, например:

    Код (LotusScript):
    mimeE.SetContentFromText(stream, {text/html;charset="UTF-8"}, ENC_NONE)
     
  10. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Serduko
    с java таже история
     
  11. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    dimat
    Тогда опишите подробнее, как формируется xml?
    Указали что агент постом... и дали код, но там только сохранение, которое мало нам нужно.
    Как формируется XML текст?
     
  12. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    savl
    Да я бы сам хотел знать, но не знаю, пост ко мне отправляет сервер другой конторы.
    Даже не известно что за платформа отправляет, но точно не лотус
     
  13. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Могу попытаться узнать, что именно нужно у них спросить?
     
  14. erdi

    erdi Well-Known Member

    Регистрация:
    20 авг 2008
    Сообщения:
    261
    Симпатии:
    36
    на сколько понимаю агент на сервере. А какая ОС на сервере? потому как обработка может вестись и с этой кодировкой. Если принять и тупо в ОС сохранить эту xml будут такие же крякозябли как и в документе или уже другие?
    может чем-то поможет картинка по определению кодировки
     

    Вложения:

  15. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    erdi
    Linux (debian), пробовал в файл сохранять - тоже самое, спасибо за картинку, попробую поределить
     
  16. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    тулза для преобразования, она кажить - какая из какой, т.е. можно наглядно разглядеть, если получим русский (подбором или автоматически)
     
  17. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Post запрос шлется curlom из php

    Вот кусок
    Код (PHP):
    $response = new DOMDocument("1.0","utf-8");
    ...
    $ch = curl_init($this->__listener);
    $data = array(
    ''guid'' => $guid,
    ''content'' => $response->saveXML()
    );
    ...
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    ....
    $result = curl_exec($ch);
     
  18. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    Натыкался на эту гадость.
    Это нотусовый баг. Пришедший массив байт (в кодировке UTF) пишется в поле документа без перекодировки и в дальнейшем воспринимается как LMBCS.
    Т.е. строка "абра" приходит как "d0 b0 d0 b1 d1 80 d0 b0" и прямо так и кладется в поле. Т.к. notes хранит все в кодировке LMBCS, то при чтении данных из поля, данные байты декодятся в кракозябры.
    В случае, если бы строка "абра" писалась стандарными нотусовыми методами - она лежала бы в поле как "14 04 30 14 04 31 14 04 40 14 04 30"

    Вариантов решения несколько:
    - выдернуть значение поля сишным апи в виде массива байт, перекодировать их (utf -> lmbcs) и положить обратно. Это низкоуровневое кунг-фу
    - заставить клиента отправлять данные не в виде голого xml(application/xml), а по нотусовой форме (multipart-form-data). Это обчно не катит, т.к. ломает существующий протокол обмена.
    - переписать агента на XPage с использованием Servlet API. Это оптимальный выбор, если не нужна поддержка семерки.
     
  19. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    turumbay разве mimeE.SetContentFromText(stream, {text/html;charset="UTF-8"}, ENC_NONE) не спасает?
    типа:
    Код (Text):
    Function EncodeMime(s As String, enc As String) As String
    Dim ses As New NotesSession
    Dim doc As notesdocument
    Dim db As notesdatabase
    Dim body As NotesMimeEntity
    Dim tmpStrm As NotesStream

    EncodeMime=""
    ses.ConvertMIME = False
    Set tmpStrm=ses.CreateStream
    Set db = ses.CurrentDatabase
    Set doc = db.createdocument
    Call tmpStrm.WriteText(s)
    ' stream.Position=0
    ' Call stream.Truncate
    ' Call stream.Close()
    Set body = doc.CreateMIMEEntity
    Call body.SetContentFromText(tmpStrm, "text/plain; charset=UTF-8", ENC_NONE)
    Call body.EncodeContent(enc)

    Dim content As String
    content=body.ContentAsText
    EncodeMime=content
    ' Print body.Encoding
    ses.ConvertMIME = True
    End Function
     
  20. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    ЗЫЖ я о перекодировке полученного, а не хранимого в поле
     
Загрузка...
Похожие Темы - Принятые Данные Из
  1. maliy
    Ответов:
    17
    Просмотров:
    131
  2. Anatoly
    Ответов:
    24
    Просмотров:
    350
  3. Shouldercannon
    Ответов:
    0
    Просмотров:
    487
  4. Ivanov Pavel V
    Ответов:
    14
    Просмотров:
    1.065
  5. JohnLemon
    Ответов:
    40
    Просмотров:
    2.423

Поделиться этой страницей