2010-10-12 17 views
5

Sto facendo un po 'di screen scraping e sto tornando indietro una stringa che sembra terminare con spazi vuoti ma né string.strip o strip.gsub (/ \ s/u,' ') rimuove il carattere.Ruby 1.9 strip non rimuove gli spazi

Suppongo che si tratti di un problema di codifica dei caratteri. Eventuali suggerimenti?

risposta

12

Penso che ci siano molti "personaggi spaziali". Si può usare qualcosa di simile:

my_string.gsub("\302\240", ' ').strip 
+1

'my_string.tr (" \ 302 \ 240 ", '') .strip' dovrebbe essere un po 'più veloce – lulalala

+1

Vale la pena notare - http://stackoverflow.com/questions/2588942/convert-non-breaking-spaces-to -spaces-in-ruby - "Usa'/[[: space:]]/'per far combaciare tutti gli spazi bianchi, inclusi gli spazi bianchi Unicode come spazi non interrompibili.Questo è diverso da// s /', che corrisponde solo agli spazi bianchi ASCII ". – DreadPirateShawn

2

Calcolare il codice carattere dell'ultimo carattere (str[-1].ord) e ricercarlo e distruggerlo esplicitamente. Risciacquare/ripetere se dopo di esso esistono più caratteri indesiderati. Dopo averlo fatto, riporto qui quale era il personaggio invisibile. (Forse è solo invisibile perché il font che stai usando non ha quel glifo?)

+1

+1 Per insegnarmi a pescare. Grazie. – fyz

4

Si può provare questo: my_string.gsub(/\A[[:space:]]+|[[:space:]]+\z/, '')

Questo dovrebbe rimuovere tutti i caratteri di spazio da l'inizio e la fine della stringa, tra cui tutte le possibili variazioni di spazio unicode.