sto usando Ruby 1.9 per aprire diversi file e copiarli in un archivio. Ora ci sono alcuni file binari, ma alcuni non lo sono. Poiché Ruby 1.9 non apre automaticamente i file binari come file binari, esiste comunque un modo per aprirli automaticamente? (Quindi ".class" sarebbe binario, ".txt" non)aprire automaticamente un file in formato binario con Ruby
risposta
realtà, la risposta precedente Alex D è incompleta. Mentre è vero che non esiste un modo "testo" nel file system Unix, Ruby non fare la differenza tra l'apertura dei file in modalità binaria e non binario:
s = File.open('/tmp/test.jpg', 'r') { |io| io.read }
s.encoding
=> #<Encoding:UTF-8>
è diverso da (notare il "rb"
)
s = File.open('/tmp/test.jpg', 'rb') { |io| io.read }
s.encoding
=> #<Encoding:ASCII-8BIT>
Quest'ultimo, come dire il docs, imposta la codifica esterna su ASCII-8BIT che dice a Ruby di non tentare di interpretare il risultato su UTF-8. È possibile ottenere la stessa cosa impostando la codifica in modo esplicito con s.force_encoding('ASCII-8BIT')
. Questa è la chiave se vuoi leggere binari in una stringa e spostarli (ad es. Salvarli in un database, ecc.).
Su piattaforme di tipo Unix, non vi è alcuna differenza tra l'apertura di file nelle modalità "binario" e "testo". Su Windows, la modalità "testo" converte le interruzioni di linea in stile DOS e la modalità "binaria" no.
A meno che non hanno bisogno di conversione di riga su piattaforme Windows, basta aprire tutti i file in modalità "binario". Non c'è nulla di male a leggere un file di testo in modalità "binario".
Se si desidera veramente distinguere, è necessario abbinare File.extname (nome file) a un elenco di estensioni note come ".txt" e ".class".
Da rubino 1.9.1 esiste un metodo separato per la lettura binaria (IO.binread
) e poiché 1.9.3 v'è uno per la scrittura (IO.binwrite
) così:
Per leggere:
content = IO.binread(file)
per la scrittura:
IO.binwrite(file, content)
Dal IO
è la classe padre di File
, si potrebbe anche fare la seguente wh È probabilmente più espressivo:
content = File.binread(file)
File.binwrite(file, content)
File.binread (file) è anche possibile – peter
Sì, dal momento che il genitore della classe 'File' è la classe' IO'. –
- 1. Visualizzazione file in formato binario
- 2. Scrivi file binario in Ruby
- 3. albero binario implementazione in Ruby
- 4. leggere un file binario (python)
- 5. Python come scrivere in un file binario?
- 6. Ruby on Rails - formato file marshall incompatibile
- 7. Scrive i numeri su un file in lua in formato binario
- 8. flusso std :: string analizzare un numero in formato binario
- 9. Come aprire un file .accdb in Ubuntu?
- 10. come leggere efficientemente un file binario in un vettore C++
- 11. Come scaricare un file memorizzato nel DB SQL in formato binario
- 12. Impossibile aprire un file con fopen()
- 13. Come gestire i problemi di portabilità in un formato di file binario
- 14. Come eliminare automaticamente i file temporanei in ruby-rails?
- 15. Controlla se un file è binario o ASCII con Node.js?
- 16. Impossibile scrivere un file binario
- 17. Aggiornare solo una parte di un file binario con C++
- 18. Invio di un file binario in Tornado
- 19. Leggere un file binario in una matrice
- 20. Crystal report .rpt file in visual studio 2012 mostra il formato binario invece del design
- 21. Come aprire i file automaticamente all'avvio di emacs?
- 22. Converti stringhe tra il formato esadecimale e il formato binario
- 23. Android: conversione XML standard in formato XML binario Android (AXML)
- 24. Scarica file con clic - Ruby on Rails
- 25. come aprire un file .launch in eclissi
- 26. Aprire un file con Blocco note in C#
- 27. aprire un file con il programma predefinito in node-webkit
- 28. Come aprire un file con relativo percorso relativo in Linux?
- 29. Come aprire un file xls con Excel in VB
- 30. Come stampare rapidamente gli hash Ruby in un formato tabella?
Si noti che questa risposta è errata. Ruby si legge in una stringa e a partire da 1.9 quella stringa ha una codifica associata. Vedi più risposta altamente modificata per i dettagli e ignorala. Se Alex può eliminarlo sarebbe preferibile. –
Se lo elimini, la risposta esistente non ha senso ("la risposta di AlexD ..."). Sarebbe meglio se le informazioni contenute in questa risposta (che menzionano l'effetto del flag "b" sulla conversione dell'intervallo di riga) siano consolidate con le informazioni nell'altra prima. –