![]() |
#1 |
Участник
|
Многоязычность в 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 ![]() Можеть Вы уже столкнулись с такой проблемой раньше , с старой 3-ей Аксаптой ? Как решать ето ? Заранее спасибо ! С уважением, Римантас |
|
![]() |
#2 |
Участник
|
Цитата:
Делая експорт в хмл , с литоскими названиями все хорошо , но тогда крякообразы появиться в руских названиях . Если поменять ХП кодировки на руские - невижу литовских .
<?xml version="1.0" encoding="utf-8"?> |
|
![]() |
#3 |
Участник
|
|
|
![]() |
#4 |
Участник
|
Я боюсь, что в рамках 3 аксапты задача нерешаемая - так как юникода там нет. Но если очень надо, придется писать что-то снаружи или полностью брать XML на себя - но это не так трудно (надо всего проискейпить несколько спецсимволов)
|
|
![]() |
#5 |
Участник
|
Похоже , что вы правы ... :-( . Ну что же будем искать других путей ...
|
|
|
![]() |
||||
Тема | Ответов | |||
XML import . Axapta 3.0 | 2 | |||
X++: Serializing Axapta Foundation Class instances as XML streams | 0 | |||
Axapta & XML | 4 | |||
XML в Axapta | 4 | |||
Введение в Аксапту | 0 |
|