2010-06-30 17 views

risposta

7

tuo iconv può essere in grado di dirvi se qualcosa non è UTF-8, ma altre codifiche non può essere così facile (soprattutto Codifiche a 8 bit, byte singolo come ISO-8859-1).

Per Git, è possibile che si desideri un hook di aggiornamento anziché un hook di pre-commit (in modo che possa essere eseguito in un repository centrale per applicare la regola).

Git gancio pre-commit:

#!/bin/sh 
git ls-files -z -- | 
xargs -0 sh -c ' 

    e="" 
    for f; do 
     if ! git show :"$f" | 
      iconv -f UTF-8 -t UTF-8 >/dev/null 2>&1; then 
      e=1 
      echo "Not UTF-8: $f" 
      #exit 255 # to abort after first non-UTF-8 file 
     fi 
    done 
    test -z "$e" 

' - 

mettere uno o più pathspecs Git dopo la -- sulle git LS-files riga di comando per limitare i percorsi che vengono controllati.

Per controllare la punta del ref aggiornate in un gancio aggiornamento, utilizzare git ls-tree --name-only -r -z $3 -- | per generare i percorsi (nota: non gestisce pathspecs reticolo come git ls-file, in modo da fare alcun filtro basato su pattern nella shell codice) e git show "$3:$f" per estrarre il contenuto del file. Si potrebbe anche voler controllare non solo il commit tip, ma ogni nuovo commit (loop per ogni commit in git rev-list ^$2 $3 invece di solo $3).

4

precommit ganci sono solo gli script. Quindi se puoi dire la codifica in uno script, allora puoi usare quella informazione per rifiutare il tipo sbagliato di file.

È possibile cercare nel file caratteri al di fuori dell'intervallo di caratteri normale. Se c'è un numero magico o un tag per dirti la codifica di un file, puoi verificarlo. Altrimenti chiediti "come faccio a sapere che questo file ha una codifica errata?" Puoi codificarlo?

2

È possibile utilizzare l'utilità iconv per modificare la codifica da UTF-8 ad esempio UTF-16. E se il cambiamento non riesce, il file di origine non è in codifica corretta:

$ iconv -f UTF-8 -t UTF-16 Strings.java 
ÿþ 
testing = iconv: illegal input sequence at position 11 
Problemi correlati