2010-06-30 15 views

Respuesta

7

Su iconv puede ser capaz de decir si algo no es UTF-8, pero otras codificaciones puede no ser tan fácil (especialmente 8 bits, codificaciones de un solo byte como ISO-8859-1).

Para Git, en realidad puede querer un enganche de actualización en lugar de un enganche precompromiso (para que pueda ejecutarse en un depósito central para hacer cumplir la regla).

Git gancho 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" 

' - 

poner uno o más pathspecs Git después de la -- en los ls-files git línea de comandos para limitar los nombres de las rutas que estén seleccionadas.

Para comprobar la punta de la ref actualizado en un gancho de actualización, utilice git ls-tree --name-only -r -z $3 -- | para generar los nombres de ruta (nota: no maneja pathspecs patrón como git ls-files, también lo hacen ningún tipo de filtrado basado en patrones en la cáscara código) y git show "$3:$f" para extraer el contenido del archivo. También es posible que desee comprobar no solo la confirmación de sugerencia, sino también cada confirmación nueva (bucle para cada confirmación en git rev-list ^$2 $3 en lugar de solo $3).

4

precommit son sólo las secuencias de comandos. Entonces, si puede distinguir la codificación en una secuencia de comandos, puede usar esa información para rechazar el tipo de archivo incorrecto.

Puede buscar en el archivo caracteres que estén fuera del rango normal de caracteres. Si hay un número mágico o una etiqueta que le diga la codificación de un archivo, puede verificarlo. De lo contrario, pregúntese "¿cómo sabría que este archivo tiene una codificación incorrecta?" ¿Puedes codificar eso?

2

Puede utilizar la utilidad iconv para cambiar la codificación de UTF-8 a, por ejemplo, UTF-16. Y si el cambio falla, el archivo de origen no está en la codificación correcta:

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