Jak domyślnie wyświetlać ukryte znaki (ZERO WIDTH SPACE ie. & # 8203)

197

Właśnie straciłem część mojego weekendu z powodu tego ... żartowniś - przestrzeń o zerowej szerokości. Właśnie użyłem fragmentów z grup google i nie rozpoznałem, że istnieją podwójne znaki, ponieważ Idea (11) ich nie pokazał, co powodowało problemy z analizowaniem pliku konfiguracyjnego mojej aplikacji ... Odkryłem go przypadkowo w vi .

Czy jest jakiś sposób wyświetlania takich rzeczy w IntelliJ (lub w inny sposób do sprawdzania plików) bez użycia zewnętrznych edytorów.

IntelliJ 11 / Mac OS 10.7

edycja - próbka

Te dwie linie wyglądają identycznie, w przeglądarce, a także w Idea. W kodzie strony widać, że w pierwszym - komentowanym wierszu jest ukryta przestrzeń zerowej szerokości między mysql://i localhost, co powoduje problemy. Oczywiście, jeśli oczekujesz tego „jokera”, możesz spróbować użyć wyszukiwania i zastąpić go, jednak nikt nie spodziewa się znaku, który nie powinien tam być, zwłaszcza jeśli nie widzi go w żaden sposób.

#db.default.url="jdbc:mysql://​localhost/play-fullcalendar"
 db.default.url="jdbc:mysql://localhost/play-fullcalendar"
Biesior
źródło
22
Ta postać powinna zostać zbanowana przez traktat międzynarodowy. To broń masowego rozproszenia. Straciłem cały dzień, próbując dowiedzieć się, co jest przyczyną tajemniczego błędu pojawiającego się w mojej konsoli js. Poważnie, postać o zerowej szerokości? To idealny przepis na kłopoty. Co myślał komitet normalizacyjny UTF?
Nick
@Nick, mam problem z załadowaniem JS (pojawia się znak zapytania wewnątrz diamentu, na końcu pliku) i uważam, że to problem z kodowaniem. I dostać Uncaught SyntaxError: Unexpected token ILLEGALi trochę badania doprowadziły mnie do myśli, że jest to ukryty problem, symbol. Jak znaleźć tę tajemniczą postać o zerowej szerokości, o której mówisz?
Żeby

Odpowiedzi:

359

Nie jestem pewien, co miałeś na myśli, ale możesz na stałe włączać i wyłączać wyświetlanie białych znaków Settings -> Editor -> General -> Appearance -> Show whitespaces.

Możesz również ustawić go dla bieżącego pliku tylko w View -> Active Editor -> Show WhiteSpaces.

Edytować:

Miałem trochę wolnego czasu, ponieważ wygląda to na popularny problem, napisałem wtyczkę, aby sprawdzić kod pod kątem takich nieprawidłowości. Nazywa się to lokalizatorem znaków o zerowej szerokości i możesz spróbować .

Vic
źródło
4
ellou 'Vic, dzięki za odpowiedź. Niestety ta opcja nie pokazuje „zerowej przestrzeni” wspomnianej w temacie. Jestem pewien, że postać istnieje, ponieważ można ją wyświetlić za pomocą np. Vi, ale nie widzę tego w Idea: /
biesior
2
Rozumiem .. Chyba będziemy musieli poczekać, aż CrazyCoder powie, że nie jest obsługiwany lub coś takiego :)
Vic
5
Począwszy od IntelliJ-14.1 jest ukrytySettings -> Editor -> General -> Appearance -> Show whitespaces -> Leading | Inner | Trailing
Rob
4
Czy można ustawić kropki u licytujących białe spacje? jak w Sublime
OlehZiniak,
2
@WillSewell, możesz wpłynąć na kolor, wybierając Settings -> Editor -> Color Scheme -> General, a następnie w obrębie tej kategorii, przejdź do Text -> Whitespaces. Zmieniłem kopalnię z domyślnego pierwszego planu # 505050 na # 404040 i widzę, że są widoczne, ale nie rozpraszają uwagi
chaserb
81

Bardzo prostym rozwiązaniem jest przeszukiwanie plików w poszukiwaniu znaków innych niż ascii przy użyciu wyrażeń regularnych. To ładnie podkreśli wszystkie miejsca, w których znajdują się z ramką.

Wyszukaj [^\x00-\x7F]i zaznacz pole Regex.

Wynik będzie wyglądał następująco (w trybie ciemnym):

widoczna przestrzeń o zerowej szerokości

Micros
źródło
Dzięki, faktycznie zaakceptowałem i dałem nagrodę za odpowiedź Vic za wtyczkę, którą stworzył, aby rozwiązać problem, który znajduje się na końcu jego odpowiedzi.
biesior 8.04.16
2
Tak, widziałem to. Zasługuje na to. Ale dla niektórych osób po prostu wyszukiwanie może być znacznie szybszym rozwiązaniem niż instalacja wtyczki.
Micros
Użyłem tego w skrypcie php, aby bardzo dobrze sformatować zawartość HTML do migracji do WordPress:$string = preg_replace( '/[^\x00-\x7F]/', null, $string ); htmlspecialchars_decode( htmlentities( html_entity_decode( $string ) ) );
aequalsb
@Micros. Czy istnieje edytor dla systemu Windows, który wyszukuje pliki w poszukiwaniu znaków innych niż ascii przy użyciu wyrażeń regularnych? W moim przypadku muszę znaleźć „\ u11891”, aby naprawić tego typu błędy: Błąd składni: niepoprawny znak '\ u11891
użytkownik1788736
@ user1788736 Tak, wiele edytorów wyróżniających składnię obsługuje to. Możesz użyć Sublime Text lub jednej z aplikacji JetBrains, takich jak WebStorm lub IntelliJ.
Micros