Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с кодировкой XML файла, заглавная буква "И"
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
Skodnik
Добрый день, форумчане!

Подскажите советом, как решить такую ситуацию.
Имеем: 1С 7.70. 0.25, конфигурация не стандартная, стороннюю программу - называется "шлюз" и кассовый аппарат с GSM модемом.
Написана обработка, которая создает xml-файл -"Справочник товаров" и отправляет его на "шлюз".
"Шлюз" установлен на отдельном компьютере, написанный на Java, использует: Java v.7 Update 21, слушает 1000 порт (для обмена с 1С) и 1002 (для обмена с кассовым аппаратом ). Сделан проброс трафика с внешнего ip на машину со "шлюзом" на порт 1002, т.е кассовый аппарат подключатся по внешнему ip к порту 1002 "шлюза" и передает\принимает данные.

В обработке для работы с xml файлами использую MSXML парсер.
XML документ создаю:
XML_Doc=CreateObject("MSXML2.DOMDocument.4.0");


На основе данных с 1С заполняю XML файл и в результате получаю:
<?xml version="1.0" encoding="utf-8"?>
<IMPORT since="20130702193600">
  <LIST>
    <DEVICES>
      <DEVICE id="ПБ0000000000"/>
    </DEVICES>
    <ITEMS clear="0">
      <ITEM code="430"  price="405" quantity="0" barcode="0"  delete="0">Салат "Итальянский" </ITEM>
    </ITEMS>
  </LIST>
</IMPORT>

Отправляю на "шлюз" этот xml файл:
Попытка      
   srvXmlHttp_SPR_TOV= СоздатьОбъект("MSXML2.xmlHttp.4.0");
Исключение
   Сообщить(ОписаниеОшибки());
КонецПопытки;    
Попытка
    srvXmlHttp_SPR_TOV.OPEN("POST","http:\\192.168.1.100:1000",1);            
    srvXmlHttp_SPR_TOV.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
    srvXmlHttp_SPR_TOV.SEND(XML_Doc);
Исключение
     Сообщить(ОписнаиеОшибки());     
КонецПопытки;


Отправка xml файла - "Справочника товаров" на "шлюз" проходит успешно.
После этого, кассовый аппарат, используя GSM модем, подключатся через внешний ip к "шлюзу" на порт 1002 и забирает данные.

В приведенном xml файла указана одна новая позиция справочника товаров, которая появится на кассовом аппарате:
Салат "Итальянский", код 430, цена 405 коп.

Проблема: В чеке на кассовом аппарате название Салат "Итальянский" печатается как Салат "??тальянский"
Т.е.: если в названии товара есть заглавная буква "И" то в чеке она будет выглядеть как "??".

Есть возможность в программу "шлюз" загрузить xml файла, приведенный выше, вручную. После этого кассовый аппарат заберет эти данный и буква "И" отображается в чеке правильно.

Соответственно разработчики программы "шлюз" и кассового аппарата (одна и та же контора) своих ошибок не видят.
Т.е. проблема именно в момент передачи xml файла с 1С на программу "шлюз".
Ответили они так: "Ошибка может быть в момент считывания данных с файла и преобразования информации в поток байт.
Либо ошибка в момент формирования HTTP-пакета так же на стороне 1С."

Пробовал этот xml файла сохранить на диск и отправить на "шлюз" используя компоненту v7plus.dll. Результата был такой же.
ЗагрузитьВнешнююКомпоненту("v7plus.dll");
Соединение =  СоздатьОбъект("AddIn.V7HttpReader");
Соединение.ОтправитьДляОбработки("http://192.168.1.100:1000","D:\file.xml",1,,);


Собственно, может ктот сталкивался с таким? И\или подскажет каким еще методом можно отправить xml файл с 1С?
Возможно нужно еще указывать какие то параметры при создание и\или отправке xml файла, которые касаются кодировки.

З.Ы. очепятка:
Правильная строка в коде
srvXmlHttp_SPR_TOV.setRequestHeader("Content-Type", "text/xml;charset=UTF-8");
Vofka
А если так
srvXmlHttp_SPR_TOV.setRequestHeader("Content-Type", "text/xml;charset=windows-1251");

?

ПС. это просто образец того "Как надо оформлять тему" smile.gif . Пожму за это палец.
Skodnik
Спасибо за совет, попробую.

Как я понимаю код:
srvXmlHttp_SPR_TOV.setRequestHeader("Content-Type", "text/xml;charset=windows-1251");

устанавливает заголовок протоколу HTTP, назначение "Content-Type" - Формат и способ представления сущности., т.е что в запросе будет "text/xml", а кодировка ему "windows-1251"
Требования к xml файлу, который формирует 1С, такие: "ПО должно формировать файл в кодировке UTF-8(без BOM)".

Vofka
Skodnik, ну, это попытка угадать, т.к. наверняка я сказать не могу. А вообще, по хорошему, надо попробовать отправить это, хотя бы, из 1С 8. Может это какой-то баг 7.7. И да, попробуйте ещё вообще строку заголовков убрать.
Skodnik
Цитата(Vofka @ 04.07.13, 15:19) необходимо зарегистрироваться для просмотра ссылки
Skodnik, ну, это попытка угадать, т.к. наверняка я сказать не могу. А вообще, по хорошему, надо попробовать отправить это, хотя бы, из 1С 8. Может это какой-то баг 7.7. И да, попробуйте ещё вообще строку заголовков убрать.


Строку заголовка убрать пробовал раньше, со строкой:
srvXmlHttp_SPR_TOV.setRequestHeader("Content-Type", "text/xml;charset=windows-1251");

ситуация не изменилась.
Буду пробовать с 8ки отправить. Хотя если и получится, лицензия у нас только на 7.7. Это уже ради спортивного интереса. 433.gif
Acid
ошибка платформы 1с скорее всего.
1 вариант - попробуйте одинарные кавычки, либо другой символ.
2 вариант - если создать хмл-файл и сохранить на диске, а потом посмотреть этот файл. эта И будет присутствовать?
Еще есть вероятность того, что двойная кавычка в шлюзе завершает тег. В общем пробуйте другой символ. Тильду например.

Готовтесь к тому, чтобы шлюз подбирал хмл-файл.
Skodnik
Цитата(Acid @ 04.07.13, 17:49) необходимо зарегистрироваться для просмотра ссылки
ошибка платформы 1с скорее всего.
1 вариант - попробуйте одинарные кавычки, либо другой символ.
2 вариант - если создать хмл-файл и сохранить на диске, а потом посмотреть этот файл. эта И будет присутствовать?
Еще есть вероятность того, что двойная кавычка в шлюзе завершает тег. В общем пробуйте другой символ. Тильду например.

Готовтесь к тому, чтобы шлюз подбирал хмл-файл.

День добрый!
1-й вариант. Любой другой символ, в не зависимости будет он стоять возле кавычек или сам по себе, прописная это буква будет или маленькая в xml файле от будет отображаться корректно. Проблема именно в заглавной букве И.
2-и вариант. Если сохранить xml файле на диске и открыть буква будет присутствовать. Так же в первом посте писал, что возможно этот
xml файле загрузить в программу "шлюз" вручную(есть кнопочка импорт) после этого касса эго заберет и в чеке буква И отображается правильно.

Хотите сказать чтоб попробовать ~ вместьо буквы И? А смысл?
Кавычки роли не играют. Что так:
 <ITEM code="430"  price="405" quantity="0" barcode="0"  delete="0">Салат "Итальянский" </ITEM>

или так
 <ITEM code="430"  price="405" quantity="0" barcode="0"  delete="0">Салат Итальянский </ITEM>

или вот так
 <ITEM code="430"  price="405" quantity="0" barcode="0"  delete="0">Икра кабачковая </ITEM>

В чеке будет вместо буквы И такое - ??
Салат "??тальянский" ,Салат ??тальянский, ??кра кабачковая
Acid
хмм... с этой буквой никогда проблем не было.
с украинской буквой І были проблемы. может файл кодировки/кириллицы у вас "битый"? есть небольшая вероятность.

могу предложить такой вариант - все символы названия формируйте в кодах utf-8. самый верняк будет.
Skodnik
Цитата(Acid @ 05.07.13, 9:37) необходимо зарегистрироваться для просмотра ссылки
может файл кодировки/кириллицы у вас "битый"? есть небольшая вероятность.

Как это проверить?
Цитата(Acid @ 05.07.13, 9:37) необходимо зарегистрироваться для просмотра ссылки
могу предложить такой вариант - все символы названия формируйте в кодах utf-8. самый верняк будет.

В какой момент форматировать символы в utf-8? В момент создания xml файл в 1C?.....

В предыдущем посте я уже писал что 1С создает xml файл корректно, проверял вручную загружая в программу "шлюз",а на отправляя в эту программу с 1С.
Проблема именно в момент передачи xml файл с 1С на программу "шлюз".
Acid
Цитата(Skodnik @ 05.07.13, 9:58) необходимо зарегистрироваться для просмотра ссылки
Как это проверить?

в 98 винде, в системных файлах был файл kernel32. Он был текстового формата и там меняли укр.букву I на I английскую.
Как сейчас организовано, не знаю.
Цитата
В какой момент форматировать символы в utf-8? В момент создания xml файл в 1C?.....

именно

можно еще попробовать хмл-файл открыть сторонним текстовым редактором (который умеет преобразовывать/перекодировать тексты). И проверить кодировку И.
Skodnik
Цитата(Acid @ 04.07.13, 17:49) необходимо зарегистрироваться для просмотра ссылки
ошибка платформы 1с скорее всего.

Пробовал с 8ки платформа 8.2.16
Текст обработки:
    Попытка 
       XML_Doc= Новый COMОбъект("MSXML2.DOMDocument.4.0");
    Исключение
      Сообщить("Не удалось создать xml документ");
    КонецПопытки;    
    XML_Doc.load("D:\xmltest.xml");
    Попытка      
      srvXmlHttp_SPR_TOV=  Новый COMОбъект("MSXML2.xmlHttp.4.0");
    Исключение
      Сообщить("Не удалось создать запрос");
    КонецПопытки;    
    Попытка
      srvXmlHttp_SPR_TOV.OPEN("POST","http://192.168.1.100:1002",1);            
      srvXmlHttp_SPR_TOV.setRequestHeader("Content-Type", "text/xml;charset=UTF-8");
      srvXmlHttp_SPR_TOV.SEND(XML_Doc);
    Исключение
      Сообщить("Не удалось отправить на шлюз данные");    
    КонецПопытки;

И собственно xml файл:
<?xml version="1.0" encoding="UTF-8" ?> 
<IMPORT since="20130704153400">
<LIST>
<DEVICES>
  <DEVICE id="ПБ0000000000" />
  </DEVICES>
<ITEMS clear="0">
  <ITEM code="430" tax="1" department="1" price="405" quantity="0" barcode="0" delete="0">Салат "Итальянский"</ITEM>
  </ITEMS>
  </LIST>
  </IMPORT>

Результат тот же 09000000.gif
Vofka
Skodnik, у вас есть какой-то сайт?
Skodnik
Цитата(Vofka @ 05.07.13, 16:08) необходимо зарегистрироваться для просмотра ссылки
Skodnik, у вас есть какой-то сайт?

Хотите сказать, что можно попробовать xml на сайте опубликовать?
Vofka
Цитата(Skodnik @ 05.07.13, 16:27) необходимо зарегистрироваться для просмотра ссылки
Хотите сказать, что можно попробовать xml на сайте опубликовать?

Нет. Можно написать на пхп страницу, которая выведет данные, полученные из 1С. И посмотреть как там отобразится "И". Если и там криво - тогда да, тогда какая-то беда в методах отправки. Но если отобразится там нормально, то тогда...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.