Как в автокаде поменять кодировку текста

Обновлено: 08.07.2024

Наконец-то вышел ACAD2021, и мне стало интересно, что там поменялось (и поменялось ли) по крайней мере в части кодировки создаваемых файлов.

Вот говорила мне мама - прежде чем высказываться, почитай документацию!

В ACAD2021 появилась новая системная переменная LISPSYS (далее вольный перевод официальной документации):
Тип - целый
Хранится в реестре

Возможные значения Описание
0 (начальное значение) VLIDE установлена как редактор кодов lsp по умолчанию, lisp не поддерживает UTF ни в каком виде.
Исходные файлы сохраняются в кодировке ANSI и с ее же использованием компилируются.
1 VisualStudio устанавливается в качестве редактора lsp по умолчанию. Т.е., если она установлена, именно она и будет вызываться по команде _.vlide. Заявлено, что lisp функции полностью поддерживают Unicode
lsp-файлы при сохранении из-под VS используют кодировку UTF и компилируются с ее использованием
2 VisualStudio устанавливается в качестве редактора lsp по умолчанию. Т.е., если она установлена, именно она и будет вызываться по команде _.vlide. Заявлено, что lisp функции полностью поддерживают Unicode
lsp файлы при сохранении используют Unicode, но при компиляции - ANSI

После изменения LISPSYS AutoCAD необходимо перезапускать.

Лично мне слабо интересно значение 2: если (не приведи боже) в коде прописано создание диалогов на лету, что мы получим в результате компиляции в fas/vlx, неизвестно никому. А тут "вероятность провала равна провалу", как говаривал папаша Мюллер (с).

Немного оффтопа. По поводу того, как выполнялись тесты и почему.

В ACAD2019 были созданы исходные коды и сохранены как lsp-файл. Сделано намеренно, поскольку ни один из пользователей / разработчиков не станет перелопачивать, переоткрывать и пересохранять тьму исходников. Соответственно lsp сохранены в кодировке ANSI. Файлы (независимо от значения LISPSYS) загружаются в AutoCAD с использованием команды _.appload либо просто "перетаскиванием" исходного кода в графическую область. SECURELOAD временно установлена равной 0.
Тестирование выполняется в английском AutoCAD 2021 x64, обновлений для ACAD на момент публикации не выходило.
Оффтоп кончился, дальше по делу.

Проверим варианты чтения текстовых файлов, записи текстовых же файлов и чтения программно записанных файлов при различных значениях LISPSYS? Ну а почему бы и нет?

Для начала создадим несколько файлов, содержащих один и тот же текст

В различных кодировках: ANSI-1251, UTF-8. Соответствено обзовем их как c:\coding\ansi.txt, c:\coding\utf-8.txt.

Используем элементарные лиспы для чтения текстовых файлов из предопределенного каталога (ну, у нас же исследовательские задачи, верно?) и вываливания в alert того, чего начитали:

Чтение файлов сведем в табличку:

LISPSYS Результат Пояснение
0 UTF не прочитан
1 UTF прочитан верно

А что будет с записью? Повторяю - код создан в более ранней версии, сохранен в кодировке ANSI, загружается в AutoCAD 2021 простым drag-and-drop или через _.appload.

И опять же табличка с результатами записи:

Ок, сохраняем файлы как lispsys=0.txt и lispsys=1.txt соответственно, и - та-дааам! - выполняем их чтение. Если создавать те же самые диалоги "на лету" (что я лично ооочень люблю делать), вопрос не покажется уже таким праздным.

LISPSYS Результат Пояснение
0 2020-04-07_22-25-31
Очень интересно! Файл, сохраненный как ANSI - таковым не читается?
1 Тут вообще все прочитано нормально

Возможно, я что-то упустил и неправильно интерпретировал, но результаты (по крайней мере по чтению программно записанных файлов) выглядят несколько странно.

Возникла проблемка.
Заказчик требует, чтобы надписи на чертежах были выполнены со шрифтом GOST Type A.

1. Выяснилось, что данный шрифт отображается по разному на разных машинах, и распечатка идет тоже соответственно по разному..
2. Не поддерживает принятых обозначений , типа "диаметр", "градус", "номер".

Первая проблемка видимо потому что данный шрифт не из автокадовских фонтов, а откуда-то снаружи.
И вторая видимо по той же причине.

[b]Вопрос - откуда Автокад берет фонты с маркой "ТТF" и как можно их поменять?[/b]


Bers



Просмотр профиля
Заказчик требует, чтобы надписи на чертежах были выполнены со шрифтом GOST Type A.
Вопрос - откуда Автокад берет фонты с маркой "ТТ" и как можно их поменять?
Что за марка "ТТ"? Может "TTF"?
И вообще, Заказчик не вправе Вам указывать, какой фонт использовать.
Хотя. за деньги - любой каприз.


Vitori



Просмотр профиля

"AutoCAD поддерживает стандарт Unicode для кодирования текстовых символов. Шрифт Unicode содержат намного больше символов, чем определено кодовой страницей, используемой в операционной системе. Большинство шрифтов AutoCAD подчиняется стандарту Unicode, исключения составляют шрифты Sysastro, Symath, Symeteo, Symbol, Symusic, Symap.

При использовании команд обработки текста для работы с любыми шрифтами, поддерживающими кодировку Unicode, можно вводить шестнадцатеричные эквиваленты символов таких шрифтов. Использование независимой от кодовой страницы формата (Code Page Independent Format) позволяет открывать рисунки с текстовыми строками на любых языках в любых операционных системах без каких-либо потерь информации.
Для того, чтобы определить, какая кодовая страница выбрана текущей в Windows, следует обратиться к ярлыку "Язык и стандарты” в панели управления.

Для определения кодовой страницы, на которую ссылается AutoCAD, следует ввести syscodepage в командной строке. Более подробную информацию можно найти на сервере компании AutoDesk."

Как я понял эти внешние шрифты прячутся на какой-то страничке в Виндах.
Как найти эту страничку?
Запрос в Акаде дал такой ответ - "SYSCODEPAGE = "ANSI_1251" (read only)"
ПУ в Виндах ничего не ответило внятного.


Vitori



Просмотр профиля

Вот еще нашел, всё уже было в этом мире.

"Наиболее интересным вопросом для нас является соответствие шрифтов AutoCAD и чертежного шрифта, требуемого ЕСКД. В современных условиях многие предприятия отказались от полного соответствия ЕСКД в вопросах, касающихся выпуска чертежей с помощью AutoCAD. Однако в стандартной поставке программы присутствуют все необходимые шрифты, очень «похожие» на шрифт ЕСКД.

Все шрифты, доступные в AutoCAD можно условно разделить на две категории:
Шрифты типа «True Type»
Шрифты типа «shx»
Шрифты «True Type» (имеют расширение «. ttf») — это шрифты, стандартные для Windows. Они делятся на две группы: часть этих шрифтов имеются в операционной системе с самого начала, а часть встраивается в ОС с другими приложениями (например, вместе с Microsoft Office). Соответственно, если в надписи использовать какой-нибудь «экзотический» шрифт, то на другом компьютере надписи просто не будут прочитаны, либо исказятся по форме и размеру настолько, что чертеж придется переделывать.

Ярким примером такого случая является следующая история. Автор как-то однажды выполнял чертеж для одного предприятия. Работа была срочной и автор, не желая «углубляться» в тонкости настройки текстовых стилей, оформил все надписи шрифтом «GOST type A. ttf», который входит в состав «Kompas». Каково же было удивление автора, когда он, принеся чертеж на заводской компьютер, увидел, что все надписи исказились из-за того, что на этом компьютере не было данного шрифта. Пришлось срочно все переделывать, используя стандартный шрифт AutoCAD.
Шрифты «shx» (имеют расширение «. shx») — это внутренние шрифты AutoCAD. Используя их на одном компьютере с AutoCAD, почти вероятно, что на другом компьютере с другой версией AutoCAD эти шрифты найдутся в неизменном виде. Поэтому использование этих шрифтов более целесообразно и корректно. (Однако есть и другие причины, говорящие в пользу «shx».)
В каждой из обеих категорий есть шрифты, удовлетворяющие требованиям ЕСКД:
Шрифт типа «True Type» «ISOCPEUR. ttf» (или «ISOCTEUR. ttf»)
Шрифт типа «shx» «RomanS. shx» (или «simplex. shx»)


Вован (Киев)

Вопрос в следующем: в автокаде есть строка DBText в кодировке CP1251 например "Рек"
Коды символов в кодировке CP1251 соответственно:
Р - 208
е - 229
к - 238
Считываю строку
.
Entity tempEntity = (Entity)MyTransaction.GetObject(id, OpenMode.ForWrite, false);
textentity = (DBText)tempEntity;
String s = textentity.TextString;
. и теперь при попытке получить код символа с (int)s[i] . получаю
Р - 1056
е - 1077
к - 1082
. т.е. он выдает уже коды в UTF, хотя я не делал преобразования.
. Подскажите кто сталкивался, на каком этапе идет преобразование CP1251->UTF и как получить коды символов родной кодировки строки (CP1251)

. Подскажите кто сталкивался, на каком этапе идет преобразование CP1251->UTF и как получить коды символов родной кодировки строки (CP1251)

Родная кодировка для AutoCAD - это как раз Unicode. Именно в Unicode AutoCAD хранит строки в dwg-файле. Только передавая их в lisp он производит перекодировку в последовательность байт в кодировке CP1251 (или в другую в зависимости от региональных установок Windows).

Родная кодировка для AutoCAD - это как раз Unicode. Именно в Unicode AutoCAD хранит строки в dwg-файле. Только передавая их в lisp он производит перекодировку в последовательность байт в кодировке CP1251 (или в другую в зависимости от региональных установок Windows).

Я понимаю что родная кодировка Unicode. По идее для автокада это означает лишь что на код символа выделено 2 байта но соответствие кодов символов таблице Unicode необязательно. Дальше должна идти строка

В CP1251: DO E5 EA
В Unicode должно храниться так: 00DO 00E5 00EA

дальше из файла шрифта shx(ESKDW.SHX), по данным кодам берутся изображения и вставляются в автокад:
*000D0,12,xd0
8,(0,18),070,03E,04C,03A,078,2,08E,080,0
*000E5,15,xe5
2,080,1,068,026,084,022,040,02E,04C,088,2,06E,080,0
*000EA,14,xea
0C4,2,08C,1,032,5,052,6,8,(5,-7),2,060,0

.
А то, что он выдал 0420 0435 043A говорит о переводе символов строки из одной кодировки в другую. Т.е. автокад, винда или шарп автоматом распознало кодировку символов и перевели их в уникод.

. если бы изначально строка хранилась как 0420 0435 043A . то как он брал бы символы из шрифта, если там коды заканчиваются 000FF

Поставляемые с AutoCAD R13 SHX шрифты содержат кириллицу (но не все). Определить SHX с кирилицей можно, если в диалоговом окне (команда DDSTYLE) нажать кнопку CharSet и далее четыре раза на Next. Если на этой (5-ой) странице вы увидите русские буквы, значит этот шрифт можно использовать под кодовой страницей ansi_1251.
Открываем файл acad.ini и в разделе [General] после строки PrototypeDwg=acad.dwg добавляем две новые строки:
CodePage=ansi_1251
Language=ru
Теперь заходим в ACAD и набираем в командной строке SYSCODEPAGE. Если все сделано правильно, значением переменной будет ansi_1251. Теперь можем писать шрифтом SHX (разумеется из этой версии) ПО РУССКИ.

Источник - Jukov Vladimir (RU.ACAD)

Как конвертировать текст в чеpтежах из cp866 в cp1251 и обpатно?

Hасколко показал опыт, шрифты 12 и 13,14 ACADа отличяются кодовой страницей: в 12 ACADе dos866, а в 13 и 14 ANSI_1251, что прописывается DXF файле начиная с 12 версии.
14 ACAD проверяет при загрузке DXF файла какая там кодовая страница и сам автоматически переводит весь текст в файле в свою (обычно ANSI_1251, иногда ANSI_1252), так, что если в 14 ACADе такие же шрифты как и в 12, то все чертежи совершенно не изменяются. Для этой цели, к примеру, можно использовать следующие скрипты:
Если нету таких шрифтов то их можно переделать из имеющихся для 12. Для этого надо переделать *.SHX файлы в *.SHP программой типа SHX2SHP или подобного плана.А потом поменять в шрифте кодировку программой SHP или подобной. Что касается конвеpтации из R14 в R12 - попpобуте пpи записи чеpтежа пpолистать типы записываемых файлов. 12-й там есть.

Второй способ (только для R13)

Открываем файл acad.ini и делаем то же, что в Действии 1, только вместо ansi_1251 ставим dos866:
CodePage=dos866
Language=ru
Далее заходим в ACAD, проверяем SYSCODEPAGE и если все нормально (показывает dos866) загружаем рисунок выполненый в DOS версии ACAD 12. Все читаемо, но не редактируемо, потому идем дальше. Сохраняем рисунок командой SAVE (For dummies only: помните, он сохраняется как DWG версии 13, кому нужно чтобы сохранился оригинал версии 12 используйте другое имя). Выходим из ACADа и в файле acad.ini опять ставим ansi_1251. Заходим в ACAD (кому не надоело) и через диалог DDSTYLE подставляем для каждого стиля текста шрифты с кириллицей из комплекта ACAD13 (одноименные должны сами подставиться). Теперь все читаемо и редактируемо. Если не нашлось одноименного шрифта в версии 13, то при замене другим возможно нарушение гармонии чертежа из-за различий пропорций и начертаний. Тут уж надо подбирать. Если же в ACAD 12 RUS вы пользовались родными шрифтами из списка:
COMPLEX.SHX
GOTHICE.SHX
GOTHICG.SHX
GOTHICI.SHX
ITALIC.SHX
ITALICC.SHX
ITALICT.SHX
MONOTXT.SHX
ROMANC.SHX
ROMAND.SHX
ROMANS.SHX
ROMANT.SHX
SCRIPTC.SHX
SCRIPTS.SHX
SIMPLEX.SHX
TXT.SHX
то замена произойдет автоматически и безболезненно, т.к. эти шрифты имеются в формате UNICODE ACAD13. Если вам не хочется постоянно редактировать acad.ini acad.ini в директории ACADа (обычно R13) создаем два каталога, например CP1251 и CP866. В каждый из этих каталогов копируем исходный файл acad.ini и acadnt.cfg. С файлом acad.ini в каталоге CP1251 выполняем Действие 1, а с одноименным файлом в каталоге CP866 Действие 2. В Win 95 создаем три ярлыка для файла acad.exe с именами, например ACAD13 CP1252, ACAD13 CP1251, ACAD13 CP866. В свойствах первого ярлыка в строке "Файл" ничего не меняем, там должна быть надпись типа C:\R13\WIN\acad.exe. Эта строка для второго ярлыка должна выглядеть так C:\R13\WIN\acad.exe /c C:\R13\CP1251. А для третьего как вы догадались: C:\R13\WIN\acad.exe /c C:\R13\CP866. Hе пропустите ключ /c. Теперь соответствующим ярлыком запускается ACAD с соответствующей кодовой таблицей.

С помощью утилиты Dbtrans из bonus utilits AutoCAD R14. Утилита находится в каталоге \bonus\cadtools\ корневого каталога AutoCAD и содержит

dbtrans.arx
dbtrans.cpm
dbtrans.hlp
dbtrans.dcl

Запускаем АКАД. Далее заходим в TOOLS / LOAD APPLICATION и подгружаем этот dbtrans. Загружаем чертеж созданный в 10-12 АКАДе

Даем в коммандной строке комманду : dbtrans и видим табличку разделенную на две половины. В левой панели выбираем исходную кодировку а в правой - результирующую.

Что ? а экране куча непонятных символов ? Это от того что АКАД не руссифицирован :) у так руссифицируйте его, заменив фонты 14 на фонты из 12 АКАДа (в этом случае правда мы не сможем ничего по русски написать в чертеже). Поэтому целесообразно произвести конвертацию шрифтов 12-го AutoCAD в 14-й то есть *.SHX файлов в *.SHP программой типа SHX2SHP или подобной, а затем с помощью программы SHP поменять кодировку.

Проблема с dbtrans поставляемой с английским AutoCAD 14 заключается в том, что там отсутствуют кодовые страницы DOS (866 Cyrillic) и ANSI 1251 (Microsoft Windows Rus). dbtrans.cpm содержащий эти кодовые страницы находится здесь. Начиная с версии 12 в чертеже может быть явно прописана кодовая таблица. Если вы загружаете чертеж с явно указанно переменной DWGCODEPAGE типа dos 866 или еще какие-нибудь то АКАД переведет в строки CIF/MIF что в последующем не поддается перекодировке, а если в переменной DWGCODEPAGE указанна неопределенная кодовая страница типа Undefenid или Dummy или ANSI 1251 то АКАД сделает из текста вопросики (АКАД открывая старый чертеж и видя там такую кодовую страницу пишет вместо нее ANSI 1251), после чего мы можем менять шрифты указанным выше способом. Для изменения кодовой страницы чертежа доступна программа AutoCAD Code Page Manipulation Utility.

Источник - Stas Palubinskas, Jukov Vladimir, Yaroslav Zhvakin, (RU.ACAD)

От Victor Sekachev: 10to14.zip

Файл alt_win содержит таблицу перекодировки, что позволяет делать любые перекодировки (866 в 1251,1251 в 866 и т.д.),достаточно только подменить сам файл нужным.

От Alexey Khrukin : coder.zip

  1. Текст
  2. Атрибуты (включая подсказки и имена)
  3. Определения атрибутов
  4. значения размеров

Можно также осущетвлять конвертацию текста в AutoCAD с помощью внешних (не входящих в AutoCAD) программ. Рассмотрим эту возможность на примере встроенного редактора известного менеджера файлов FAR.

  • Загружаем старый чертеж в AutoCAD.
  • Загружаем функцию Autolisp позволяющую импортировать текст в внешний файл
  • Запускаем FAR и осущетвляем конвертацию текста в нем в требуемую кодировку
  • Загружаем функцию Autolisp позволяющую экспортировать текст в из внешнего файла в чертеж

Пример функции, строки меню для нее и файла внешних команд AutoCAD находится здесь.

Для тестирования программного обеспечения от Autodesk был принят стандарт Британского института стандартов (BSI), основные принципы которого таковы:

  1. Никакое значение текущей даты не должно привести к прерыванию операции.
  2. Использующие системную дату функции должны вести себя корректно как до так в течении и после 2000 года.
  3. Во всех интерфейсах и хранилищах данных столетие любой даты должно быть определено или явно, или с использованием однозначного алгоритма, или правилом логического вывода.
  4. Год 2000 должен признаться как високосный год.

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

Архитектуный обзор заключается в обзоре как используется дата на уровне архитектуры программы. Специальное внимание уделяется тому, как дата представляется и управляется внутри программы, а также ее трансляция между внутренним представлением и внешним интерфейсом.

Обзор кода состоит в проверки логики представления даты внутри программы.

Испытание сдвигом времени заключается в установки системной даты на определенные значения в 2000 году. Затем дата устанавливается в 1999 год, что бы проверить стабильность ее предидущей работы.

Далее осущетвляется закрытие и рестарт системы, ее инсталяция и деинсталяция в 2000 году.

Преобразование, использование и печать даты в программных продуктах Autodesk зависит от представления даты в операционной системе, которую использует данная программа. Поэтому для информации о решении проблемы 2000 года в Microsoft Windows следует обращатся на сайт Microsoft, посвященный 2000 году. Если используется другая операционная система, следует обратиться к разработчику данной операционной системы.

Некоторые компьютеры имеют проблему, состоящую в сбросе системной даты к 1980 году, при наступлении 2000 года. Для решения этой проблемы необходимо обратиться к производителю данного компьютера.

Перечень программных продуктов Autodesk и резултатов их тестирования по проблеме 2000 года находится здесь. Каждый программный продукт может быть:

  1. Соответствовать стандарту BSI;
  2. Соответствовать стандарту BSI c незначительными проблемами (проблемы включаются в комментарий к оценке совместимости);
  3. Не соответствовать стандарту BSI;
  4. Будет проверен - испытание на соответствие стандарту BSI не закончены;
  5. Не будет проверен - программа не была проверенна и не будет проверенна на соответствие стандарту BSI.

Рекомендуется переодически посещать сайт Autodesk что бы иметь возможность получить исправления к программам по проблеме 2000 года после того, как они станут доступными.

Hадо просто расставить буквы русского алфавита по соответствующим местам в .ttf шрифте.

Принцип работы - когда ты пишешь шрифтом .shx , то в окне мультитекс- тового редактора отображается .ttf шрифт, поставленный в соответствие файлом mtextmap.ini. Если соответствие не задано прямо, используется прокси- подстановка, т.е. шрифт proxy наиболее подходящий по размеру символов (с точки зрения ACADa). Проблема в том, что кириллица в тех шрифтах, что идут в комплекте поставки есть, на стоит не там, где этого требует Юникод. Решение проблемы - в файле mtextmap.ini вместо последнего нуля (из четырех в равенстве) поставить 204, а в соответ- ствующих .ttf шрифтах - расставить символы кирилицы на предусмотренные Юникодом позиции. И еще желательно в Винде указать использование для этих шрифтов Кириллической страницы, поскольку Acad при установке указывает Западноевропейскую.

Microsoft сообщает, что ряд приложений, включая AutoCAD 2000/2002/2004, некорректно работает с Windows XP SP2. Среди других усовершенствований в области безопасности SP2 дает возможность использовать Windows Firewall, который блокирует нежелательные подключения к вашему компьютеру. Во многих случаях Firewall предупреждает, что заблокированная им программа пытается получить доступ к компьютеру, однако пользователь AutoCAD должен вручную открыть порт 21, предназначенный для обзора проектов с использованием FTP-вьюера (File Open Dialog box), когда удаленный FTP-сервер работает с включенным Firewall. Чтобы вручную разблокировать этот порт, необходимо сделать следующее:

Читайте также: