You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS系统bash/sh环境使用curl获取SharePoint JSON时Unicode字符转义异常问题

问题原因

  1. SharePoint返回的JSON本身就将非ASCII字符转义为\uXXXX格式,这是JSON规范允许的合法表示方式,和curl本身无关。
  2. macOS系统默认自带的bash版本为3.2.x(受GPL协议限制苹果没有更新更高版本),同时POSIX标准的sh的echo内置命令默认不解析\u类的反斜杠转义序列,直接原样输出就会看到\u00f6这类内容。
  3. zsh的echo内置命令默认开启了转义序列解析,会自动把\u00f6转换为对应的Unicode字符ö,所以zsh下显示正常。
  4. 你原脚本中echo $files没有给变量加双引号,还会导致空格、换行等特殊字符被shell拆分,也可能引发显示异常。

解决方法

方法1:使用printf(兼容所有POSIX shell,推荐)

printf是POSIX标准定义的命令,行为在不同shell下完全一致,用%b参数即可解析字符串中的反斜杠转义,修改脚本如下:

#!/bin/sh
url="https://company.sharepoint.com/sites/Testfiles"
folder="TestDocuments"

files=$(curl -s "$url/_api/web/GetFolderByServerRelativeUrl('Documents/$folder')/Files" -H "Accept: application/json")
printf '%b\n' "$files"

注意所有变量引用都加上双引号,避免字符拆分问题。

方法2:给bash的echo加-e参数

如果确认运行环境是bash,可以给echo加上-e参数开启转义解析:

echo -e "$files"

注意-e不是POSIX标准参数,在纯sh环境下可能不生效。

方法3:使用jq处理JSON(专业处理JSON场景推荐)

如果需要长期处理JSON数据,推荐使用专用JSON处理工具jq,它会自动解析\u转义为实际Unicode字符,同时支持格式化、过滤JSON字段等功能:

  1. 先安装jq:brew install jq(macOS下使用Homebrew安装)
  2. 修改脚本直接管道输出到jq即可:
#!/bin/sh
url="https://company.sharepoint.com/sites/Testfiles"
folder="TestDocuments"

curl -s "$url/_api/web/GetFolderByServerRelativeUrl('Documents/$folder')/Files" -H "Accept: application/json" | jq .

如果需要提取文件名等字段,还可以直接用jq过滤,比如jq '.value[].Name'就能直接输出所有正常显示的文件名。


内容的提问来源于stack exchange,提问作者SuperDOS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 09:45:03