13.12.2019, 12:03 | #1 |
Участник
|
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 |
Участник
|
X++: stringValue = System.Convert::ToString(_value); |
|
13.12.2019, 12:42 | #3 |
Участник
|
Цитата:
Если пишу ret = ClrInterop::getAnyTypeForObject(_value), то всё равно вопросы |
|
13.12.2019, 15:07 | #4 |
Участник
|
Заметил, что при открытии базы там ещё прописаны различные настройки. Одна из них
X++: set language us_english |
|
17.01.2020, 11:28 | #5 |
Участник
|
Если вызывать эту библиотеку из C#, то текст нормально отображается и без всяких преобразований, а если из акапты, то ??????.
X++: ret = ClrInterop::getAnyTypeForObject(_value); |
|
17.01.2020, 18:41 | #6 |
Участник
|
Если у Вас поле имеет тип именно 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). |
|
|