AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.10.2012, 14:29   #1  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Многоязычность в xml ... Axapta 3.0
Здраствуйте,

Никак немогу решить експорт в хмл . Дело в том что надо заполнить <lt>(литовский), <ru>(руский) и <en>(англиский) разделы . В Аксапте , я ети названия по литовский и по руский - вижу , база дн. Оракл , заданна UTF8 кодировка . Комп ( XP prof ) настроен на литовскую среду ( regional -> advanced ... ) . Делая експорт в хмл , с литоскими названиями все хорошо , но тогда крякообразы появиться в руских названиях . Если поменять ХП кодировки на руские - невижу литовских .
Ещё пробывал и с классой UTF8 :

X++:
Exportfile for AOT version 1.0 or later
Formatversion: 1

***Element: CLS

; Microsoft Business Solutions-Axapta Class: Utf8 krautas Antradienis 2012.10.23
; --------------------------------------------------------------------------------
  CLSVERSION 1
  
  CLASS #Utf8
    PROPERTIES
      Name                #Utf8
      Extends             #
      RunOn               #Called from
    ENDPROPERTIES
    
    METHODS
      Version: 3
      SOURCE #classDeclaration
        #class Utf8
        #{
        #    #define.CP_ACP(0)
        #    #define.CP_UTF8(65001)
        #}
      ENDSOURCE
      SOURCE #Ansi2Utf8
        #static str Ansi2Utf8(str Ansi)
        #{
        #    DLL             _kernelDLL        = new DLL("KERNEL32");
        #    DLLFunction     MultiByteToWideChar  = new DLLFunction(_kernelDLL, "MultiByteToWideChar");
        #    DLLFunction     WideCharToMultiByte  = new DLLFunction(_kernelDLL, "WideCharToMultiByte");
        #    Binary          buf, buf1;
        #    int             len;
        #    str             res;
        #
        #    res = "";
        #    if (Ansi)
        #    {
        #        buf = new Binary(strlen(Ansi));
        #        buf.string(0, Ansi);
        #        buf1 = new Binary( ( strlen(Ansi ) + 1 ) * 2 );
        #        MultiByteToWideChar.returns(ExtTypes::DWord);
        #        MultiByteToWideChar.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord,
        #                                    ExtTypes::Pointer, ExtTypes::DWord);
        #        if (MultiByteToWideChar.call(#CP_ACP, 0, buf, strlen(Ansi) + 1, buf1, strlen(Ansi) + 1 ))
        #        {
        #            WideCharToMultiByte.returns(ExtTypes::DWord);
        #            WideCharToMultiByte.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord,
        #                                        ExtTypes::Pointer, ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord);
        #            len = WideCharToMultiByte.call(#CP_UTF8, 0, buf1, strlen(Ansi) + 1 , buf, 0, 0, 0);
        #
        #            if (len)
        #            {
        #                buf = new Binary(len);
        #                if (WideCharToMultiByte.call(#CP_UTF8, 0, buf1, strlen(Ansi), buf, len - 1, 0, 0))
        #                {
        #                    res = buf.string(0);
        #                }
        #
        #            }
        #        }
        #
        #    }
        #    return res;
        #}
      ENDSOURCE
      SOURCE #Utf2Ansi
        #static str Utf2Ansi(str Utf8)
        #{
        #    DLL             _kernelDLL        = new DLL("KERNEL32");
        #    DLLFunction     MultiByteToWideChar  = new DLLFunction(_kernelDLL, "MultiByteToWideChar");
        #    DLLFunction     WideCharToMultiByte  = new DLLFunction(_kernelDLL, "WideCharToMultiByte");
        #    Binary          buf, buf1;
        #    int             len;
        #    str             res;
        #
        #    res = "";
        #    if (Utf8)
        #    {
        #        buf = new Binary(strlen(Utf8));
        #        buf.string(0, Utf8);
        #        buf1 = new Binary((strlen(Utf8) + 1) * 2);
        #        MultiByteToWideChar.returns(ExtTypes::DWord);
        #        MultiByteToWideChar.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord,
        #                                    ExtTypes::Pointer, ExtTypes::DWord);
        #        if (MultiByteToWideChar.call(#CP_UTF8, 0, buf, strlen(Utf8) + 1, buf1, strlen(Utf8) + 1))
        #        {
        #            WideCharToMultiByte.returns(ExtTypes::DWord);
        #            WideCharToMultiByte.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord,
        #                                        ExtTypes::Pointer, ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord);
        #            len = WideCharToMultiByte.call(#CP_ACP, 0, buf1, strlen(Utf8) + 1, buf, 0, 0, 0);
        #
        #            if (len)
        #            {
        #                buf = new Binary(len);
        #                if (WideCharToMultiByte.call(#CP_ACP, 0, buf1, strlen(Utf8) + 1, buf, len, 0, 0))
        #                {
        #                    res = buf.string(0);
        #                }
        #
        #            }
        #        }
        #
        #    }
        #    return res;
        #}
      ENDSOURCE
    ENDMETHODS
  ENDCLASS

***Element: END
Но неуспешно ... . Как я понимаю , когда настраиваешь регионал -> адвансед , то тогда поменяеться таблица кодировки - литовская 1257 , руская 1251 . И иметь в переменных в то же самое время - никак неполучаеться ...

Можеть Вы уже столкнулись с такой проблемой раньше , с старой 3-ей Аксаптой ? Как решать ето ?

Заранее спасибо ! С уважением, Римантас
Старый 23.10.2012, 16:30   #2  
Xardas is offline
Xardas
Участник
 
28 / 13 (1) ++
Регистрация: 19.09.2012
Цитата:
Делая експорт в хмл , с литоскими названиями все хорошо , но тогда крякообразы появиться в руских названиях . Если поменять ХП кодировки на руские - невижу литовских .
А вы пробовали кодировку UTF-8 в XML использовать? В ней оба этих языка должны присутствовать.
<?xml version="1.0" encoding="utf-8"?>
Старый 24.10.2012, 09:34   #3  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от Xardas Посмотреть сообщение
А вы пробовали кодировку UTF-8 в XML использовать? В ней оба этих языка должны присутствовать.
<?xml version="1.0" encoding="utf-8"?>
Ето есть , без всяких сомнении ...
Старый 24.10.2012, 11:24   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Я боюсь, что в рамках 3 аксапты задача нерешаемая - так как юникода там нет. Но если очень надо, придется писать что-то снаружи или полностью брать XML на себя - но это не так трудно (надо всего проискейпить несколько спецсимволов)
Старый 25.10.2012, 10:27   #5  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от belugin Посмотреть сообщение
Я боюсь, что в рамках 3 аксапты задача нерешаемая - так как юникода там нет. Но если очень надо, придется писать что-то снаружи или полностью брать XML на себя - но это не так трудно (надо всего проискейпить несколько спецсимволов)
Похоже , что вы правы ... :-( . Ну что же будем искать других путей ...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
XML import . Axapta 3.0 Rimantas DAX: Программирование 2 30.08.2012 09:17
X++: Serializing Axapta Foundation Class instances as XML streams Blog bot DAX Blogs 0 04.06.2009 23:05
Axapta & XML dj_Mage DAX: Программирование 4 11.08.2006 12:42
XML в Axapta axot DAX: Программирование 4 01.11.2002 11:37
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:04.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.