Nginx的access.log的编码是什么?我正在尝试遍历文件,但我的脚本 raises an exception “UTF-8 中的无效字节序列
”当它发现对我的服务器的请求中包含中文/泰文字符时。
最佳答案
HTTP 协议(protocol)请求主要是 ASCII,数据字段允许是任何八位字节。参见 Which encoding is used by the HTTP protocol? .
Nginx 的错误和访问日志将反射(reflect)这一点。
我对来自一个小型北美站点的 450,000 条记录的经验表明,除了一条记录外,所有记录都可以无误地解码为 ASCII。该记录包含 4 个连续字节 (b'\xb8E\x8c\xde'),它们是无效的 UTF-8 但有效的 big5hkscs(Python 的繁体中文编解码器)产生了两个字形。
参见 How can I programmatically find the list of codecs known to Python?获取用于对非 ASCII 位进行暴力攻击的编解码器名称列表。
将二进制日志记录解码为 ASCII,使用 '?'替换错误,足以满足我的需求。
https://stackoverflow.com/questions/33986569/