Непонятное поведение функции strlen, и вообще об unicode в txt-файлах
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Непонятное поведение функции strlen, и вообще об unicode в txt-файлах

Непонятное поведение функции strlen, и вообще об unicode в txt-файлах

Ответ
Поиск в этой теме
Непрочитано 01.09.2010, 17:15 #1
Непонятное поведение функции strlen, и вообще об unicode в txt-файлах
batmax
 
Регистрация: 28.08.2010
Сообщений: 10

Написал команду, она должна парсить текстовый файл отчёта об импорте, только ничего не работает. Стал разбираться, оказывается, ф-ия (strlen) возвращает бред.
Вот примеры (вверху идут строки файла-отчёта, внизу - значения strlen для них):

Код:
[Выделить все]
НАЧАЛО ИМПОРТА
Дата и время: 31.08.2010 9:17:20

Содержимое файла отчёта об импорте:
Код:
[Выделить все]
strlen=30
strlen=42
strlen=0
strlen=65
Как видим, только для третьей строки (она пустая) strlen не врёт, =0, а для остальных строк она "приблизительно" вдвое превышает истинное значение. Строки прочитаны из текстового файла функцией (readline f), файл открыт (setq f (open fname "r")).
Подскажите, как мне быть:
а) как вообще считает символы Лисп в случае присутствия кириллицы в строке;
б) как выполнить сравнение с константной строкой, зашитой в тексте программы.
И вообще, есть какие-то методы НОРМАЛЬНОЙ работы с кириллицей в лиспе (имеются в виду строки, содержащие кириллицу, в текстовом файле) ?
Просмотров: 3978
 
Непрочитано 01.09.2010, 17:30
#2
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 428


Предположу, что в конце строк имеются пробелы - надо их отсечь
ытя вне форума  
 
Непрочитано 01.09.2010, 17:44
#3
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


а посмотри что выдает строка (readline ...) если "вернуть" ее в консоль - сдаеться мне там что-то типа utf-8 в кодировке
p.s. если полезли вместо строк - кракозябры - пересохрани в блокноте в ANSI - либо тебе хороший повод написать uft8->ansi, ansi-utf8.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 01.09.2010, 18:20
#4
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Если оба условия TRUE:
1. Этот отчёт формируется программно вами же.
2. В Visual Lisp присутствуют инструменты для работы с XML

То в этом случае было бы лучше формировать отчёт в виде XML, тогда и проблем с парсингом не возникнет (имхо).

Цитата:
...об unicode в txt-файлах...
...а для остальных строк она "приблизительно" вдвое превышает истинное значение.
ANSI занимает один байт, а Unicode - два. Возможно команда strlen создана так, что она считает именно байты (я этого не утверждаю, а всего лишь предполагаю).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 01.09.2010 в 18:30.
hwd вне форума  
 
Автор темы   Непрочитано 01.09.2010, 19:08
#5
batmax


 
Регистрация: 28.08.2010
Сообщений: 10


Цитата:
Сообщение от Дима_ Посмотреть сообщение
если полезли вместо строк - кракозябры - пересохрани в блокноте в ANSI - либо тебе хороший повод написать uft8->ansi, ansi-utf8
пересохранить в блокноте не получится, т.к. файл формируется программно (не пересохранять же каждый раз). написать uft8->ansi, ansi-utf8 - мысль интересная. Вообще-то пока выкручиваюсь с парсингом так, чтобы не пересекаться с кириллицей.
batmax вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Непонятное поведение функции strlen, и вообще об unicode в txt-файлах



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Express Tools Perezz!! AutoCAD 483 13.02.2015 10:57