最近的一段工作在处理 nginx access 日志中遇到了很头疼的问题,双引号变为 \x22,还有莫名其妙的各种 \x 开头的字符串,最开始采用简单的替换法则,但很快就发现无法穷尽。
出现该问题主要有两种情况:
1、浏览器请求 json 数据格式,json 中的双引号会变为 \x22
参考:https://moonbingbing.gitbooks.io/openresty-best-practices/content/something/2016_7.html
2、字符为中文或其他非英文字符时,会变为 16 进制
参考:http://hopehook.com/2017/12/18/nginx_request_body_parse/
https://juejin.im/post/5949e0f7128fe1006a627cc0
google 搜索 nginx 中文 16进制关键字
我的最终解决方案比较简单粗暴,因为我的最终目的是保证数据解析不出错,不丢失条数。也就是说不出异常即可,所以我的最终在数据处理前将所有的 \x 替换为百分号:.replaceAll("\\\\x", "%")
end.