如何让curl忽略API返回的错误字符以避免响应中断?
解决curl因非UTF字符中断输出的问题
以下是几种可行的解决方式,按优先级推荐:
1. 先将输出保存到文件查看
终端对非UTF-8字符的兼容性较差,直接输出可能导致截断。先把响应内容保存到文件,再查看文件内容:
curl -d "$(cat input.json)" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -X POST "https://api/xx.com/v1/xxx?sindex=0&count=30&api_key=..." > output.json
之后用cat output.json或less output.json查看文件,less能更好地处理特殊字符,不会出现截断。
2. 使用curl的--raw参数强制原始传输
--raw参数会让curl跳过内容编码处理,以原始模式接收数据,确保完整输出所有字符:
curl --raw -d "$(cat input.json)" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -X POST "https://api/xx.com/v1/xxx?sindex=0&count=30&api_key=..."
3. 通过iconv过滤非法字符
如果需要直接在终端查看,用iconv转换编码并忽略无法识别的字符,避免输出中断:
curl -d "$(cat input.json)" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -X POST "https://api/xx.com/v1/xxx?sindex=0&count=30&api_key=..." | iconv -f UTF-8 -t UTF-8 -c
其中-c参数会让iconv自动丢弃无法转换的非法字符,保证输出完整。
4. 临时调整终端字符编码
如果是终端编码不兼容导致的截断,可临时切换到ISO-8859-1编码(兼容所有单字节字符):
# 设置终端编码为ISO-8859-1 export LC_ALL=en_US.ISO-8859-1 # 执行curl命令 curl -d "$(cat input.json)" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -X POST "https://api/xx.com/v1/xxx?sindex=0&count=30&api_key=..." # 恢复原UTF-8编码(可选) export LC_ALL=en_US.UTF-8
内容的提问来源于stack exchange,提问作者Zak
相关产品推荐
相关产品推荐

