Na to pytanie jest znacznie więcej, niż mogłoby się wydawać. Dopiero od Ruby 1.9 istniała koncepcja znaków (w niektórych kodowaniach) w stosunku do surowych bajtów. Tak więc w Rubim 1.9 możesz odejść z prośbą o kodowanie. Ponieważ dostajesz rzeczy z LDAP, kodowanie nadchodzących napisów powinno być dobrze znane, najprawdopodobniej ISO-8859-1 lub UTF-8.
W takim przypadku można uzyskać kodowanie i działają na tym:
some_variable.encoding # => when ASCII-8BIT, treat as a photo
Skoro naprawdę chcesz sprawdzić, czy dane binarne to zdjęcie, to jest sens, aby uruchomić go za pośrednictwem biblioteki obrazów. RMagick przychodzi na myśl. documentation pokaże ci, jak sprawdzić, czy jakiekolwiek dane binarne są w rzeczywistości zakodowane w formacie JPEG. Będziesz także mógł przechowywać inne właściwości, takie jak szerokość i wysokość.
Jeśli nie masz zainstalowanego RMagick, alternatywnym podejściem byłoby zapisanie danych w pliku Temp, zejście do Uniksa (zakładając, że jesteś na systemie Unix) i próba identyfikacji pliku. Jeśli twój system ma zainstalowany ImageMagick, polecenie identify
powie ci wszystko o obrazach. Ale właśnie dzwoni file
na to powie ci to zbyt:
~/Pictures$ file P1020359.jpg
P1020359.jpg: JPEG image data, EXIF standard, comment: "AppleMark"
Trzeba wezwać identify
i file
komendy w shell from Ruby:
%x(identify #{tempfile})
%x(file #{tempfile})
Nawiasem mówiąc, coraz kodowanie bezpośrednio ze zmiennej wonów Działa, jeśli dane w formacie JPEG są zakodowane w formacie łańcuchowym, takim jak Base64. –
Niesamowite wytłumaczenie. Na razie używam po prostu '.encoding.name! = 'ASCII-8BIT'', który będzie działał dobrze, dopóki nie zdecyduję się na bardziej rozbudowany później. Dziękuję za tak kompletną odpowiedź. –
Chętnie pomogę! –