Newsgroup: it.comp.macintosh
Titolo: Piccola richiesta: script o programma per convertire in UTF-8

Ho un fatto progetto Java costituito da una marea di file che 
stupidamente ho scritto con codifica MacRoman, volendo garantire massima 
portabilità mi servirebbe trasformarli in UTF-8.
So già come si fa manualmente, con iconv, ma volevo sapere se qualcuno 
di voi conosce un programma o magari (per i più volenterosi) è in grado 
di farmi uno script al quale fornendo una directory mi converte tutti i 
file contenuti nella stessa e nelle sue sottodirectory. In questo modo 
mi evito di farlo file per file.
Ne approfitto per chiedere: dal momento che questo software genera anche 
file xml a partire da file di testo e che tali file di testo subiscono 
varie modifiche via xslt, quale codifica mi consigliate di adottare per 
i file java? Latin1 o UTF-(?
Grazie :-)!
-- 
ReX
su Yamaha Fazer 600 '02
contatti MSN/Skype: 
kat...@inwind.it

 file contenuti nella stessa e nelle sue sottodirectory.
for file in *
  do iconv -f MACROMAN -t UTF8 $file > $file.tmp
  mv $file.tmp $file
done
Per ogni file lancia iconv e come output salva con nomefile.tmp, poi 
rinonima nomefile.tmp in nomefile (sovrascrivendo l'originale). Non 
tiene in considerazione directory e nient'altro, quindi è piuttosto 
grezzo. SE FAI DANNI NON PRENDERTELA CON ME. La parte in maiuscolo nella 
frase prima di questa è fondmaentale. ;)
-- 
Jollino
Salvaguardia dell'italiano: 
http://www.nokappa.it
Cerchi spazio web? Io mi trovo bene con Servage:
http://www.servage.net/?coupon=cust24439

 frase prima di questa è fondmaentale. ;)
Grazie mille, gentilissimo :-).
Non lo riesco però ad usare, lo devo mettere in un file di testo da 
richiamare da terminale? Ho provato a farlo ma mi da:
iconv: bin: I/O error
iconv: doc: I/O error
iconv: src: I/O error
Dove i tre file di sopra sono le directory nei quali ci sono i file da 
convertire e io ho eseguito lo script nella directory che li contiene.


 i file java? Latin1 o UTF-(?
Potendo, direi proprio UTF-8. Ben supportata da Java, standard per XML
etc etc etc.
-- 
cc = callcc {|cc| cc.call cc}; cc.call cc

 Con uno o pochi files si fa...
credo che il problema sia quello. Che ne ha tanti sparsi in un
sottoalbero di directory.
Per cui puoi anche scriptare TextWrangler, eh. Ma allora tanto vale
usare tool un po' più performanti che richiedono lo stesso sforzo.


 convertire e io ho eseguito lo script nella directory che li contiene.
qualche modifica:
-->8--
#!/bin/bash
convert()
{
  for f in `ls *.java`; do
    iconv -f MACROMAN -t UTF-8 $f > $f.tmp
    mv $f $f.bak
    mv $f.tmp $f
  done
}
if [[ $1 ]]; then
  s=$1
else
  s=.
fi
for d in `find $s -type d`; do
  p=`pwd`
  cd $d
  convert
  cd $p
done
-->8--
Salva questi comandi in un file java2utf8.sh nella directory root dei file
java; apri il terminale, posizionati nella directory root e digita:
$ chmod a+x java2utf8.sh
$ ./java2utf8.sh
Vengono salvati i file originali con estensione .bak (casomai succedesse
qualcosa).
NOTA BENE: fai una copia della cartella PRIMA di processare i file (non si
sa mai cosa possa andare storto!).
-- 
L'Italia verra' comprata in Yuan,
e sara' pagata in contanti.

 $ ./java2utf8.sh
Fatto, ma mi restituisce:
ls: *.java: No such file or directory
ls: *.java: No such file or directory
ls: *.java: No such file or directory
ls: *.java: No such file or directory


   for f in `ls *.java`; do
La mia limitatissima conoscenza di bash (mi dimentico sempre la sintassi 
delle if, per dire) mi permette di semplificare questa riga con un 
semplice:
for f in *.java; do
:)


 :)
ah, non dirlo a me, io sono un principiante!
esistono 1000 modi diversi di scriverlo in modo piu' succinto :)


 ls: *.java: No such file or directory
Ha incontrato delle directory che non contengono file .java
Nelle altre sono apparsi i .java.bak?


 esistono 1000 modi diversi di scriverlo in modo piu' succinto :)
Più che altro credo che fare `ls *.java` dentro il ciclo for sia del 
lavoro in più, perché deve chiamare "esternamente" ls e prenderne 
l'output. Se lo fa direttamente credo che "consumi" meno.
Si vede che a breve comincerò a programmare in assembly per 
microcontrollori, eh? :D


 microcontrollori, eh? :D
+__+
che l'ottimizzazione sia con te!


 che l'ottimizzazione sia con te!
Pensa che mi sono orientato sugli Atmel AVR invece dei PIC proprio per 
semplificarmi la vita. Sto aspettando un programmatore USB dal Canada 
(aiuto...), poi comincerņ a farmi del male. :D


 Nelle altre sono apparsi i .java.bak?
Si si, me li ha creati, ha anche fatto l'encoding come volevo, grazie 
mille anche a te ;-)!


 etc etc etc.
Già, immaginavo.
Ho però un piccolo problema: i file XML che mi creo con Java escono 
fuori in formato MacRoman, non mi sembra di aver visto un costruttore o 
metodo di FileOutputStream per indicare la codifica UTF8, strano.


 metodo di FileOutputStream per indicare la codifica UTF8, strano.
<
http://java.sun.com/javame/reference/apis/jsr219/java/io/OutputStreamWr
iter.html>
OutputStreamWriter(OutputStream out, String enc) 
          Create an OutputStreamWriter that uses the named character
          encoding.
In effetti la parte di I/O di Java è fra le cose più complesse,
sovraingegnerizzate e barocche che ho visto in assoluto e in particolare
pure secondo gli standard di Java.
Leggendo qui dice una cosa interessante:
<
http://www.macosxhints.com/article.php?query=console&story=200502080539
51714>
Ovvero che lo stream out di default usa MacRoman. Siccome se ricordo
bene pure gli altri stream di default usano un encoding dipendente dalla
piattaforma, ecco spiegato l'inghippo.
Il signore ha vinto un utilizzo gratuito dei 'magnifici' tool di
refactoring 'Enterprise Class' per mettere a posto un problema che non
avrebbe nemmeno dovuto esserci.


 mille anche a te ;-)!
Ora puoi passare alla cassa (/me si mette il cappellino "cassiere"), poi 
ci penso io a ridistribuire la ricchezza. :D


 pure secondo gli standard di Java.
Guarda, io amo Java dal punto di vista della programmazione (non certo 
delle performances). Ora sto facendo forse uno dei 3 progetti piů 
impegnativi che abbia mai fatto e grazie all'ottimo supporto allo 
sviluppo e il magico Eclipse sto procedendo veramente bene.
Quando programmo in C/C++ mi metto sempre le mani nei capelli, ma questo 
č dovuto anche alle mie scarse conoscenze dei ambienti unix e shell.


 ci penso io a ridistribuire la ricchezza. :D
Hai vinto la possibilità di fare il betatester del mio software :-P!


 è dovuto anche alle mie scarse conoscenze dei ambienti unix e shell.
Programmare in C e C++ sono due cose estremamente differenti. Avere OS X
sotto le chiappe e non imparare unix è quasi un'offesa agli dei oscuri
dell'informatica! :P


 Hai vinto la possibilità di fare il betatester del mio software :-P!
Alè! Che software è?


 Hai vinto la possibilità di fare il betatester del mio software :-P!
si spera che qualcuno abbia prima fatto unit testing :P
-- 
Le Carême, ils vont à la boucherie, comme les chiens.

 č dovuto anche alle mie scarse conoscenze dei ambienti unix e shell.
Se programmi con le MFC hai anche la sensazione impagabile di stare
reinventando la ruota


 sulla gesione degli encoding 
allora non e' dovuta alla mia imperizia l'impossibilita' pratica di leggere
correttamente un file utf-16:
def collect(infile, outfile)
  # Open outfile for writing
  File.open(outfile, "w") do |out|    
    # Create sentences array
    sentences = []
    # Iterate over infile's lines
    File.foreach(infile, "\000\n\000\n") do |line| # !!!
      # Extract the comment and sentence pair
      comment, pair = line.chomp.split(/\s*\n\s*/)
      # Create a new Sentence object and push into array
      sentences << Sentence.new(comment, pair)
    end
    # Sort the sentences array
    sentences.sort!
    # Flush to outfile
    out.puts sentences
  end
end


 correttamente un file utf-16:
Alt: io ho detto che ruby (il linguaggio/l'interprete) non gestisce gli
encoding in modo decente. Le librerie per farlo esistono :P
Mi spiego: io per usare utf-8 agevolmente avevo usato jcode e compagnia
(settando $KCODE!). Se hai bisogno di utf16, dovresti cavartela con
Iconv. Nella libreria standard IIRC (pag. 686 del pickaxe).


 reinventando la ruota
esagonale, perņ!
