Сообщество программистов Autodesk в СНГ
ADN Club => AutoCAD .NET API => Тема начата: Дмитрий Загорулькин от 15-12-2017, 18:42:26
-
Здравствуйте!
Возможно, что у меня под вечер немного ум за разум заходит, но мне видятся некоторые возможные проблемы с записью строки в XData под кодом DxfCode.ExtendedDataAsciiString. Не зря же там уточнение, что именно ASCII-строка? Может же получиться так, что какая-то строка будет искажена из-за этого при чтении-записи (если есть какие-то спецсимволы)? Возможно, есть какой-то справочный материал по этой теме?
-
По опыту пишется все подряд без проблем: кириллица, символы форматирования и всякие значки...
-
Это ободряет! :)
Проверил на запись-чтение такую строку: !@#$%^&*()_+№";:?-=[]{}'|\/.,<>`~%‰°±•
Проблем не возникло. Думаю, такого набора спецсимволов мне хватит.
(https://s8.postimg.org/qkifum3mp/XData_String_Symbols.png) (https://postimg.org/image/qkifum3mp/)
Думал: может имеет смысл заранее предусмотреть конвертацию строки в поток байтов и записывать под кодом DxfCode.ExtendedDataBinaryChunk? Но, вроде как, и DxfCode.ExtendedDataAsciiString нормально справляется.
-
Не зря же там уточнение, что именно ASCII-строка?
Это может быть любая Unicode-строка. Во всяком случае явных ограничений нет. В документации указано длиной до 255 байт. Вот тут интересный момент: байт или символов (в одном символе два байта)? Нужно проверять. Думаю что символов. Хранятся они точно как Unicode-строки, как и любые строки в AutoCAD начиная с 2007-ой версии.
-
Вот тут интересный момент: байт или символов (в одном символе два байта)? Нужно проверять. Думаю что символов.
Хм, а как можно проверить? Есть идеи по алгоритму? Я бы проверил, но не представляю как :(
-
Хм, а как можно проверить? Есть идеи по алгоритму? Я бы проверил, но не представляю как :(
Загони в строку 255 символов "\u2211" (это символ ∑) и запиши её в расширенные данные в DxfCode.ExtendedDataAsciiString. Ну и убедись, что их 255, а не обрезало наполовину.
-
Загнал тысячу символов Ё. Получил тысячу символов Ё. Слухи про ограничение длины сильно преувеличены ;)
Есть подозрение что Автокад вообще игнорит это поле с типом - используйте для себя как хотите, а я просто храню массив байт.
-
Загони в строку 255 символов "\u2211" (это символ ∑) и запиши её в расширенные данные в DxfCode.ExtendedDataAsciiString. Ну и убедись, что их 255, а не обрезало наполовину.
Загнал, проверил, убедился - все 255 на месте :)
Загнал тысячу символов Ё. Получил тысячу символов Ё. Слухи про ограничение длины сильно преувеличены
Есть подозрение что Автокад вообще игнорит это поле с типом - используйте для себя как хотите, а я просто храню массив байт.
А если выполнить Audit с исправлением ошибок? Вот статья на эту тему: http://spiderinnet1.typepad.com/blog/2012/11/autocad-net-xdata-xdata-string-length-limit-physical-and-theoretical.html
-
Загнал тысячу символов Ё. Получил тысячу символов Ё. Слухи про ограничение длины сильно преувеличены ;)
Есть подозрение что Автокад вообще игнорит это поле с типом - используйте для себя как хотите, а я просто храню массив байт.
dwg/dxf-файл сохранял и потом открывал? Ведь обрезка может быть на этапе сохранения.
-
А если выполнить Audit с исправлением ошибок?
Черт! Аудит подрезал строку до 256 символов! Просто сохранение dwg проверял сразу - хранится все нормально сколько угодно.