Un'applicazione sul computer deve leggere in un file di testo. Ne ho diversi e uno non funziona; il programma non riesce a leggerlo e mi dice che da qualche parte c'è un personaggio cattivo. La mia prima ipotesi è che ci sia un personaggio non-ascii da qualche parte, ma non ho idea di come trovarlo. Perl o qualsiasi regex generico sarebbe bello. Qualche idea?documento di ricerca per non-ascii
risposta
È possibile utilizzare [^\x20-\x7E]
per abbinare un carattere non ASCII.
ad es. grep -P '[^\x20-\x7E]' suspicious_file
Ho avuto un problema nell'utilizzarlo, in quanto avrebbe identificato anche tutti i caratteri di fine riga nel mio file. Combinare la tua risposta con Ruakh ha funzionato come un fascino: [^ \ t \ n \ r \ x20- \ x7E] – JMM
Nel mio caso, la [risposta dall'altra domanda] (http://stackoverflow.com/a/ 882437/873282) era meglio: '[\ xE0- \ xFF]' – koppor
perl -wne 'printf "byte %02X in line $.\n", ord $& while s/[^\t\n\x20-\x7E]//;'
troveranno ogni personaggio che non è un ASCII glyphic carattere, scheda, spazio, o di nuova riga.
Se segnala 0D
s (ritorni a capo) in file O.K., quindi cambiare \t\n
in \t\n\r
.
Se segnala solo i file 0D
in cattivi, è probabile che sia possibile correggerli eseguendo dos2unix
su di essi.
Solo un addendum, si dovrebbe eseguire l'input come argomento finale non elencato. –
Così, grazie! Ho dovuto cambiarlo leggermente per una console DOS: 'perl -wne" printf qq (byte% 02X nella riga $. \ N), ord $ e while s/[^ \ t \ n \ x20- \ x7E]//;"
Se si utilizza tabulazioni nel codice sorgente così, provate questo modello:
[^\x08-\x7E]
funziona anche in Notepad ++
Cosa hai provato finora? – nmagerko
Credo che tu possa trovare una risposta [qui] (http://stackoverflow.com/questions/881931/how-can-i-find-extended-ascii-characters-in-a-file-using-perl)? – Neilos
Ho accettato il caffè matematico perché era funzionante in modo superlativo in Notepad ++ –