2010-11-18 10 views
24

In qualche modo non riesco a far funzionare le fonti UTF-8 con Ant.Problema di codifica della formica su Windows - file UTF-8 ma sputa immondizia sui segni diacritici

Ottengo un sacco di "avviso: carattere non impostabile per la codifica ascii". Sto impazzendo, davvero. Ore e ore e ore. A proposito, ho notato che 5 persone hanno già usato il tag crazy. :-)

E sì, ho letto this, this e altri. Google anche (i primi risultati di 5 pagine di almeno 3 o 4 ricerche diverse, almeno). Ci sono opzioni javac. Ho provato. C'è anche qualche preset o qualcosa del genere (mi dispiace, alle 3 del mattino). Non ha funzionato neanche.

Sto generando file apk Android con Ant. Non posso usare Eclipse, quindi no. E a proposito, la documentazione delle formiche non ha senso per me. Questi esempi sono inutili. Ho perso il conto su quanto ho provato.

Ho provato a utilizzare l'opzione Dfile.encoding, ho provato a mixarlo con il comando CHCP 65001 di Windows. Ha fatto tutte le combinazioni, e rende anche Ant (Javac immagino) smettere di sputare errori, ma non ha ancora importanza. Il mio codice finisce sempre con spazzatura (un po 'di invece di, ecc.).

+1

Posso capire la tua frustrazione, ma non ci stai dando molto per aiutarti. Se si riuscisse a ridurlo a un semplice esempio con un build.xml e un file di origine Java, si aumenteranno le possibilità di ottenere una risposta un po '. – JesperE

+0

So che non lo sono. Questo è esattamente il motivo per cui ero così frustrato. So quanto sia orribile rispondere a queste domande. Il problema è che anche io non sapevo da dove cominciare. Ecco perché mi dispiace poter aggiungere ulteriori informazioni. Probabilmente dovrei aggiungere anche il tag 'android', ma poi posso aggiungere solo 5 tag (lo so, i principianti hanno un ruolo basso, giusto?). Ad ogni modo, non sono riuscito a vedere alcuna attività ... Credo che fosse il mio problema. Ho finalmente scoperto la soluzione stamattina. Era abbastanza semplice, ma in qualche modo ben nascosto ... almeno per me. Ma grazie ... – davidcesarino

+0

Ti dispiacerebbe condividere la tua soluzione con gli altri? –

risposta

5

A tutti voi che usano UTF-8 file di origine su Windows e stava cercando di costruire pacchetti Android con Proguard utilizzando the famous blog post by Dan Galpin/Tim Bray.

Questo problema di codifica si verifica con javac (grazie per il suggerimento, JesperE). Tuttavia, non sono riuscito a creare una nuova regola javac sui file del mio progetto, a causa di parametri necessari di cui non sapevo nulla. Quindi ecco la risposta facile (probabilmente non è l'unica risposta):

  1. Provare il solito comando "ant rilascio".
  2. Si noti che, all'inizio, c'è un'uscita che parla di alcune regole ANT importate. All'inizio vedrai alcune regole [di setup]. Se vuoi inserire questo:

    [SETUP] regole l'importazione di file: \ strumenti formica \ ant_rules_r3.xml

  3. trovare quel file e aprirlo. Cerca "codifica javac". Vedrai che è impostato su "ascii". Passare a "UTF-8".

  4. Esegui di nuovo il "rilascio ant" e tutto andrà bene.

Ecco come ho fatto qui. Sono sicuro che c'è un modo per ignorarlo in base al progetto. Ma continuava a darmi errori sui parametri obbligatori, come ho detto. Quindi, per me almeno è stato molto più semplice farlo in questo modo. Inoltre, io lavoro solo con UTF-8 comunque.

+0

So che questa non è la soluzione migliore (non una per progetto). Ma fino a quando non imparerò i meccanismi interni di javac e formica, questo è quello che farò e ciò che funziona meglio per il mio problema. Se lo fai, ricorda che stai modificando l'opzione sull'SDK. SEI STATO AVVERTITO! – davidcesarino

28

Si sta specificando la codifica del file nel compilatore correttamente? In caso contrario, il compilatore java utilizzerà la codifica predefinita della piattaforma, che su Windows (ad esempio) non è UTF-8. La codifica viene specificata utilizzando il flag -encoding su javac.

javac -encoding utf8 ... 

E in build.xml ant:

<javac ... encoding="UTF-8" ... /> 
+0

Grazie, era su Roller Coaster su questo. Funziona perfettamente – Anand

17

Basta specificare la codifica nello script build.xml:

<javac encoding="UTF-8" ... /> 

Ma per riutilizzo del codice è meglio estrarre valore in specifico per il progetto file di configurazione:

<property file="build.properties" /> 
<property name="java.encoding" value="ascii" /> 
<javac encoding="${java.encoding}" 
     source="${java.source}" ....> 
     <src path="${source.dir}" /> 
     <classpath> 
      <fileset ... /> 
     </classpath> 
</javac> 

E poi basta aggiungere java.encoding=UTF-8 a build.properties per sovrascrivere la codifica in base al progetto.

4

È necessario impostare la stessa pagina in molti luoghi:

  1. in Ant Script javac encoding="UTF-8" ... /
  2. -Dfile.encoding=UTF-8 nei parametri di Ant chiamando
  3. Nel file-proprietà-resource-codifica - ancora una volta scegliere lo stesso pagina. Puoi anche cambiarlo per tutti i file nel contenitore tramite IDE (preferenze per Eclipse). Quindi crea tutti i file per ereditarlo dal contenitore.

  4. Se alcuni file sono stati creati con codifica errata, rielaborano il loro contenuto tramite PsPad o forse un altro editor di testo (copia-incolla, modifica codifica file, copia-incolla posteriore). Questi file saranno menzionati negli errori unmappable character.

Dopo aver impostato tutti questi quattro problemi non si avranno unmappable character righe.

1

sotto è l'utilizzo di -Dfile.encoding = UTF-8 nel file build.xml ant:

<java classname="${main-class}" fork="true"> 
<jvmarg value="-Dfile.encoding=UTF-8"/> 

Questo risolverà il problema. Funzionando per tutti i caratteri 8 di UTF.

Problemi correlati