Как отобразить скрытые символы по умолчанию (ZERO WIDTH SPACE, т.е.. & # 8203)

197

Я только что потерял часть своих выходных из-за этого ... джокера - пространства нулевой ширины. Я просто использовал некоторые фрагменты из групп Google и не распознал, что есть двойные символы, потому что Idea (11) их не показывал, что вызывало проблемы с анализом файла конфигурации моего приложения ... Я обнаружил это случайно в vi ,

Есть ли способ отображать такие вещи в IntelliJ (или каким-либо другим способом проверки файлов) без использования внешних редакторов.

IntelliJ 11 / Mac OS 10.7

редактировать - образец

Эти две строки выглядят одинаково как в браузере, так и в Idea. Вы можете видеть в коде страницы, что в первой строке с комментариями есть скрытое пространство нулевой ширины между mysql://и localhost, что вызывает проблемы. Конечно, если вы ожидаете этого «шутника», вы можете попытаться использовать поиск и заменить его, однако никто не ожидает появления знака, которого не должно быть, особенно если он не может его увидеть.

#db.default.url="jdbc:mysql://​localhost/play-fullcalendar"
 db.default.url="jdbc:mysql://localhost/play-fullcalendar"
biesior
источник
22
Этот персонаж должен быть запрещен международным договором. Это оружие массового отвлечения. Я потерял целый день, пытаясь выяснить, в чем причина таинственной ошибки, которая появляется в моей консоли js. Серьезно, символ нулевой ширины? Это идеальный рецепт для неприятностей. О чем думал комитет по стандартам UTF?
Ник
@ Ник, у меня проблемы с загрузкой моего JS (я получаю знак вопроса внутри ромба в конце файла), и я считаю, что это проблема кодирования. Я получил Uncaught SyntaxError: Unexpected token ILLEGALнемного исследований и привел меня к мысли, что это проблема скрытых символов. Как мне найти таинственного персонажа нулевой ширины, о котором вы говорите? Просто чтобы посмотреть, в этом ли проблема ...
Милкнукейз

Ответы:

359

Не уверен, что вы имели в виду, но вы можете постоянно включать и выключать отображение пробелов Settings -> Editor -> General -> Appearance -> Show whitespaces.

Кроме того, вы можете установить его для текущего файла только в View -> Active Editor -> Show WhiteSpaces.

Редактировать:

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

Vic
источник
4
Вай, спасибо за ответ. К сожалению, эта опция не показывает «пространство нулевой ширины», упомянутое в теме. Я уверен, что персонаж существует, потому что может отображать его с помощью ie. Vi, но не вижу этого в Idea: /
biesior
2
Понятно .. Думаю, нам придется подождать, пока CrazyCoder скажет, что он не поддерживается или что-то в этом роде :)
Vic
5
Начиная с IntelliJ-14.1, в котором он спрятанSettings -> Editor -> General -> Appearance -> Show whitespaces -> Leading | Inner | Trailing
Роб
4
Можно ли сделать точки у участника торгов пустыми пространствами? как в возвышенном
OlehZiniak
2
@WillSewell, вы можете повлиять на цвет, выбрав Settings -> Editor -> Color Scheme -> General, затем в этой категории перейдите к Text -> Whitespaces. Я изменил свой с переднего плана по умолчанию # 505050 на # 404040 и нахожу их видимыми, но не отвлекающими
chaserb
81

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

Найдите [^\x00-\x7F]и установите флажок для Regex.

Результат будет выглядеть так (в темном режиме):

пространство нулевой ширины стало видимым

Micros
источник
Спасибо, на самом деле я согласился и дал награду за ответ Вика за плагин, который он создал для решения проблемы, с которым он связан в конце своего ответа.
biesior
2
Да, я видел это. Это заслуженно. Но для некоторых людей простой поиск может оказаться гораздо более быстрым решением, чем установка плагина.
Micros
я использовал это в php-скрипте, чтобы сделать очень хорошо отформатированный HTML-контент для миграции в WordPress:$string = preg_replace( '/[^\x00-\x7F]/', null, $string ); htmlspecialchars_decode( htmlentities( html_entity_decode( $string ) ) );
aequalsb
@Micros. Есть ли редактор для окон, который ищет в файле (ах) символы, отличные от ascii, используя регулярное выражение? В моем случае мне нужно найти '\ u11891', чтобы исправить ошибки этого типа: SyntaxError: Недопустимый символ '\ u11891
user1788736
@ user1788736 Да, многие редакторы с подсветкой синтаксиса поддерживают это. Вы можете использовать Sublime Text или одно из приложений JetBrains, например, WebStorm или IntelliJ.
Micros