NanoCAD-23.1 - как вывести в ASCII файл текст, содержащий unicode-символы
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > NanoCAD-23.1 - как вывести в ASCII файл текст, содержащий unicode-символы

NanoCAD-23.1 - как вывести в ASCII файл текст, содержащий unicode-символы

Ответ
Поиск в этой теме
Непрочитано 10.10.2024, 13:12 #1
NanoCAD-23.1 - как вывести в ASCII файл текст, содержащий unicode-символы
===AAA===
 
г. Норильск
Регистрация: 15.08.2005
Сообщений: 616

Всем привет!

Имеем текст:

"I ≥ 10mA", где символ "≥" - юникодовский.

Попробуем вывести его в обычный текстовый ASCII-файл
функцией (write-line).

AutoCAD "по-честному" запишет:
I \U+2265 10mA

А вот nanoCAD выведет туда:
I ? 10mA

т.е. информация пропадёт.

Если кто-то уже с этим сталкивались и знает, чем заменить
функцию (write-line) - подскажите, плиз.

Ну и имейте это ввиду при адаптации своих старых наработок.
__________________
Счастливо, Алексей!
Просмотров: 894
 
Непрочитано 10.10.2024, 14:43
#2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


просто акад с 21 версии начал поддерживать юникод в лиспе)

----- добавлено через ~48 мин. -----
хотя по любому писать в текстовой файл с кодировкой ASCII символы юникода бессмысленно же) Вам надо искать - как вывести из лиспа в текстовой файл с кодировкой юникода - например, пост №9 отсюда от Lee Mac

Последний раз редактировалось Сергей812, 10.10.2024 в 15:34.
Сергей812 вне форума  
 
Автор темы   Непрочитано 10.10.2024, 18:09
#3
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Цитата:
...писать в текстовой файл с кодировкой ASCII символы юникода бессмысленно же)
Ну, не совсем.

В 99.999% случаев это будет чистый ASCII-текст, редчайшие "вкрапления"
в который всяких "\U+XXXX" можно и потерпеть. По крайней мере, меня пока
поведение АвтоКАДа в этой части вполне устраивало.

Хотя, конечно же, "в идеале...", "когда-нибудь потом..." можно будет
заморочиться и на "чистый" unicode-файл.

А пока нужна функция, которая ASCII-символы выводит в файл, как ASCII,
а юникоды (ежели они вдруг встретятся) - как "\U+XXXX"

Т.е. заставить в этом плане NC вести себя, как АС.

Если готовой функции на примете ни у кого нет, напишу свою.

С перебором строки текста посимвольно. Но пока не могу понять, как,
скажем, символу сопоставить 2265, какая функция на это способна?
__________________
Счастливо, Алексей!

Последний раз редактировалось ===AAA===, 10.10.2024 в 18:18.
===AAA=== вне форума  
 
Непрочитано 10.10.2024, 18:42
1 | #4
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


текстовой файл - это просто последовательность байт, которую можно интерпретировать как текстовые символы. Используется кодировка ASCII - каждый байт как символ, но больше 255 символов никак не засунешь. Unicode - там уже могут быть варианты с количеством байт до 4-х на один символ. Вот нано, похоже, честно и пишет вместо всех символов, коды которых превышают 255 - символ вопроса в кодировке ASCII.

А что, код, который дал в ссылке - не подошел?

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
С перебором строки текста посимвольно. Но пока не могу понять, как,
скажем, символу ≥ сопоставить 2265, какая функция на это способна?
для начала надо определить - поддерживает ли вообще нанолисп юникод)
Сергей812 вне форума  
 
Непрочитано 10.10.2024, 20:44
#5
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,809


===AAA===,
я нанокада не видел, но можно посмотреть что выдаёт в нк, например, функция (vl-string->list "I ≥ 10mA").
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 11.10.2024, 05:43
#6
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Команда: (vl-string->list "I ≥ 10mA")
(73 32 63 32 49 48 109 65)

Информация здесь теряется. :-(

Здесь тоже.

Команда: (ascii "≥")
63

Для сравнения - в AutoCAD ситуация другая:

Команда: (vl-string->list "I ≥ 10mA")
(73 32 92 85 43 50 50 54 53 32 49 48 109 65)

Команда: (ascii "≥")
92
__________________
Счастливо, Алексей!

Последний раз редактировалось ===AAA===, 11.10.2024 в 05:51.
===AAA=== вне форума  
 
Непрочитано 11.10.2024, 07:09
#7
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,809


а если так
(vl-list->string '(92 85 43 50 50 54 53))
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 11.10.2024, 07:35
#8
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Так-то оно нормально будет:

Команда: (vl-list->string '(92 85 43 50 50 54 53))
"\\U+2265"

но мне как раз обратное действие нужно...

В частном-то случае задача решается, ибо:

Команда: (setq a "≥")
"≥"
Команда: (= a "\U+2264")
nil
Команда: (= a "\U+2265")
T

но как решить её "в общем виде" ?
__________________
Счастливо, Алексей!

Последний раз редактировалось ===AAA===, 11.10.2024 в 07:41.
===AAA=== вне форума  
 
Непрочитано 11.10.2024, 09:46
#9
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
но как решить её "в общем виде" ?
в общем виде это решается переходом на язык программирования, который поддерживает юникод (а сам юникод появился еще лет 30 назад). Либо пробовать использовать костыли в виде того же scripting.filesystemobject, который в свою очередь позволяет создавать CreateTextFile с поддержкой юникода.
Сергей812 вне форума  
 
Непрочитано 11.10.2024, 09:51
#10
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,809


===AAA===,
можно попробовать вставить в строку сразу юникод "\U+2265" вместо "≥", например "I \\U+2265 10mA".
а что поддержка нк не говорит ничего по этому поводу?
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 11.10.2024, 10:20
#11
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Цитата:
... вставить в строку сразу юникод "\U+2265" вместо "≥" ...
Да, так и сделал.

В "частном виде" это уже готово, т.к. у меня этих юникодов - по пальцам посчитать.

Через (cond ) сделал исключения - там делов-то на несколько строк текста.
Оформил отдельной функцией. Перед выводом текста в файл "прогоняю"
строку через функцию. Если появятся ещё юникоды - ещё добавлю.

Но - думал - может быть есть более общее и уже готовое решение в виде
неизвестной мне функции...

Цитата:
а что поддержка нк не говорит ничего по этому поводу?
С ними связь односторонняя. Я даже и писать им перестал. Не отвечают.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > NanoCAD-23.1 - как вывести в ASCII файл текст, содержащий unicode-символы



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли повернуть размерный текст в Revit 2019? modest-bp Revit 1 21.05.2025 14:49
JavaScript. nanoCAD 5. Экспорт геометрии в позиционный проект Stark ES Нубий-IV Готовые программы 15 15.10.2020 17:47
Можно ли вывести в файл данные: имя групп и номера КЭ входящих в каждую из групп? eilukha SCAD 0 01.05.2018 06:46
добавить символы в однострочный текст ngg AutoCAD 12 12.04.2017 20:43
В русской версии AutoCAD 2010 SP1 32-bit файл Acad.PGP содержит ошибки. hwd Баги и пожелания в Autodesk 21 21.04.2010 20:27