Quel est le format d’encodage du journal d’access de nginx?

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.