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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.12.2019, 12:03   #1  
SuperStar88 is offline
SuperStar88
Участник
 
82 / 10 (1) +
Регистрация: 11.08.2017
ax 2009. CLRObject to str. Неправильная кодировка
Есть API на C# для работы с внешней БД (через OleDB).
БД Collation: Cyrillic_General_CI_AS, Field type: varchar(255)

При возвращении текстового значения вместо нормального текста отображаются знаки вопроса.

Пробовал перекодировать, и никакого результата:
X++:
stringValue = System.Convert::ToString(_value);

encodingSource      = System.Text.Encoding::get_UTF8(); //GetEncoding(866);
encodingDest        = System.Text.Encoding::get_ASCII(); //GetEncoding(1251);

bytes               = encodingSource.GetBytes( stringValue );
stringValueXpp      = encodingDest.GetString(bytes);

Последний раз редактировалось SuperStar88; 13.12.2019 в 12:10.
Старый 13.12.2019, 12:18   #2  
Pandasama is offline
Pandasama
Участник
 
457 / 137 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
X++:
stringValue = System.Convert::ToString(_value);
а вы вот здесь не теряете никаких данных? может быть имеет смысл _value (кстати, какого оно типа?) сразу как массив байт получить и посмотреть что там внутри вообще ?
Старый 13.12.2019, 12:42   #3  
SuperStar88 is offline
SuperStar88
Участник
 
82 / 10 (1) +
Регистрация: 11.08.2017
Цитата:
Сообщение от Pandasama Посмотреть сообщение
X++:
stringValue = System.Convert::ToString(_value);
а вы вот здесь не теряете никаких данных? может быть имеет смысл _value (кстати, какого оно типа?) сразу как массив байт получить и посмотреть что там внутри вообще ?
Object _value, но фактически это String

Если пишу ret = ClrInterop::getAnyTypeForObject(_value), то всё равно вопросы
Старый 13.12.2019, 15:07   #4  
SuperStar88 is offline
SuperStar88
Участник
 
82 / 10 (1) +
Регистрация: 11.08.2017
Заметил, что при открытии базы там ещё прописаны различные настройки. Одна из них
X++:
set language us_english
Старый 17.01.2020, 11:28   #5  
SuperStar88 is offline
SuperStar88
Участник
 
82 / 10 (1) +
Регистрация: 11.08.2017
Если вызывать эту библиотеку из C#, то текст нормально отображается и без всяких преобразований, а если из акапты, то ??????.
X++:
ret = ClrInterop::getAnyTypeForObject(_value);
Старый 17.01.2020, 18:41   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Если у Вас поле имеет тип именно varchar(), т.е. это не unicode, то корректно прочитать данные из этого поля можно только и исключительно в том случае, если текущая кодовая страница "читающей" стороны совпадает с той кодовой страницей в которой происходила запись в это поле

Т.е., например, если у Вас при записи была кодовая страница 866, то и читать Вы должны при текущей кодовой странице 866 и никак иначе. В противном случае, вопросики и получите

Перекодировка прочитанного значения смысла уже не имеет. Вы должны перекодировать в момент чтения, а не "после". У Вас уже результат чтения не корректный. Вам надо или с собственно запросами экспериментировать или какие-то настройки среды чтения делать. Возможны еще настройки подключения, но это обычно у ODBC есть автотранслейт.

На форуме https://www.sql.ru/forum/microsoft-sql-server поищите рекомендации. Там полно подобных вопросов типа: запускаю отсюда - нормально, а запускаю отсюда - вопросики

-----------------

Решение "в лоб", если лень искать настройки, это примерно такой запрос

X++:
SELECT ColumnName collate Cyrillic_General_CI_AS

FROM dbo.TABLENAME
Явное указание в какой кодировке читать значение поля таблицы. Это, разумеется, не очень удобно, но можно проверить саму идею
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...

Последний раз редактировалось Владимир Максимов; 17.01.2020 в 19:06.
За это сообщение автора поблагодарили: FrolovAndy (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: Overview of AX build numbers Blog bot DAX Blogs 3 24.05.2012 19:44
daxsol: Axapta Kernel Functions Blog bot DAX Blogs 1 16.05.2009 19:22
Dynamics AX: Managing Your Supply Chain Using Microsoft Dynamics AX 2009 - Book Review Blog bot DAX Blogs 0 31.03.2009 23:06
gl00mie: Dynamics AX 2009 Guides and White Papers Blog bot DAX Blogs 0 13.08.2008 20:09
Dynamics AX: Business Intelligence in Dynamics AX 2009 (Part I) Blog bot DAX Blogs 0 26.06.2008 02:19

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:59.