Quel est l’encodage de access.log de Nginx? J’essaie de parcourir le fichier, mais mon script déclenche une exception ” invalid byte sequence in UTF-8
” lorsqu’il voit des requêtes sur mon serveur contenant des caractères chinois / thaïlandais.
Une requête de protocole HTTP est principalement ASCII, avec des champs de données autorisés à être des octets. Voir Quel encodage est utilisé par le protocole HTTP? .
Les journaux d’erreur et d’access de Nginx refléteront cela.
Mon expérience avec 450 000 enregistrements provenant d’un petit site nord-américain a révélé que tous les enregistrements sauf un étaient décodés en ASCII sans erreur. Cet enregistrement contenait 4 octets consécutifs (b ‘\ xb8E \ x8c \ xde’) qui étaient des UTF-8 non valides mais étaient des big5hkscs valides (codec de Python pour le chinois traditionnel) qui produisaient deux glyphes.
Voir Comment puis-je rechercher par programmation la liste des codecs connus de Python? obtenir une liste de noms de codec pour une attaque en force sur des bits non-ASCII.
Décoder les enregistrements de journaux binarys en ASCII, avec ‘?’ le remplacement des erreurs, était assez bon pour mes besoins.