2010-10-12 19 views
5

Robię skrobanie ekranu i otrzymuję ciąg znaków, który wydaje się kończyć białymi znakami, ale ani string.strip, ani strip.gsub (/ \ s/u, '') usuwa znak.Pasek Ruby 1.9 nie usuwa białych znaków

Zgaduję, że jest to problem z kodowaniem znaków. Jakieś sugestie?

Odpowiedz

12

Myślę, że istnieje wiele "znaków przestrzennych". Można użyć coś takiego:

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

'my_string.tr (" \ 302 \ 240 "," ') .strip' powinno być nieco szybsze – lulalala

+1

Warto zauważyć - http://stackoverflow.com/questions/2588942/convert-non-breaking-spaces-to -spaces-in-ruby - "Użyj'/[[: space:]]/', aby dopasować wszystkie spacje, w tym spacji Unicode jak spacje nierozdzielające.Nie jest to podobne do'/\ s/', które pasuje tylko do białych znaków ASCII . " – DreadPirateShawn

2

Pokaż kod postaci ostatniego znaku (str[-1].ord) i jawnie go wyszukaj i zniszcz. Płukanie/powtórzenie, jeśli po tym wystąpi więcej niechcianych znaków. Po wykonaniu tej czynności zgłoś tutaj, czym była niewidzialna postać. (Być może jest to tylko niewidoczne, ponieważ czcionka, której używasz, nie ma tego glifu?)

+1

+1 Za uczenie mnie, jak łowić ryby. Dziękuję Ci. – fyz

4

Można spróbować to: my_string.gsub(/\A[[:space:]]+|[[:space:]]+\z/, '')

Należy usunąć wszystkie spacje z początku i końca łańcucha znaków, w tym wszystkich możliwych wariantów kosmicznych Unicode.

Powiązane problemy