Странный символ для пустой строки в TextWrangler и cat -v

У меня есть текстовый файл, который на моем Mac я открываю с помощью TextWrangler. Я включаю невидимые символы, чтобы увидеть окончания строк. Я вижу, что каждая пустая строка имеет красный, перевернутый вопросительный знак. Какой это персонаж?

Когда в терминале я печатаю cat -v file.txtпоказывает эти символы как ^@ (и сами окончания строки как ^M). То, что мне нужно знать, это регулярное выражение этого конкретного персонажа, как /n для конца строки.

В шестнадцатеричном дампе я вижу следующее:

0000000: 312e 300d 0a00 0d0a 2231 3130 3030 3030  1.0....."1100000
0000010: 3030 3222 3b22 3922 3b22 5354 4422 3b3b  002";"9";"STD";;
0000020: 3b0d 0a22 3131 3030 3030 3030 3639 223b  ;.."1100000069";

Если я вручную удаляю странные символы и создаю новый шестнадцатеричный дамп, я вижу:

0000000: 312e 300d 0a0d 0a22 3131 3030 3030 3030  1.0...."11000000
0000010: 3032 223b 2239 223b 2253 5444 223b 3b3b  02";"9";"STD";;;
0000020: 0d0a 2231 3130 3030 3030 3036 3922 3b22  .."1100000069";"

Разница заключается в последовательности байтов 00. Существует ли кодировка, в которой этот 00 требуется для пустых строк?

1 ответ

Решение

Красный перевернутый знак вопроса, на который вы смотрите, очевидно, является символом NULL / NUL. Будет ли это иметь какое-то значение, зависит от того, будет ли приложение писать / читать рассматриваемые файлы. (Так что, скорее всего, это не общая проблема кодирования. Сравните: Wikipedia.)
Как только вы сделали скрытые символы видимыми в TextWrangler, вы можете пометить этот / любой символ (или последовательность символов в этом отношении) и скопировать его в поле ввода Find, используя CMD + E. NULL символ отображается как \x{00} на моей машине.
В качестве альтернативы вы можете использовать -> Текст -> Zap Gremlins... с проверенными (как минимум) нулевыми (ASCII 0) символами, Заменить выбранным кодом и получить подсказку \x00, Любой из них должен работать при поиске этих символов - независимо от того, включен ли grep или нет. Не уверен, однако, будь \s на самом деле должен найти его также в режиме grep - его нет на моей машине. Но \W делает grep это.

Пожалуйста, прокомментируйте, если и как это требует корректировки / более подробной информации.

Другие вопросы по тегам