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

Bash脚本读取XML文件致DYMO打印服务XML验证失败

解决Bash读取XML文件发送DYMO打印服务报错问题

核心问题

直接用$(cat)或普通方式读取XML文件到变量时,Bash会自动替换换行符为空格,同时解析XML中的特殊字符(如双引号、反斜杠),导致XML结构被破坏,DYMO服务验证失败。而手动赋值时你刻意保留了完整格式,所以能正常打印。

可行解决方案

1. 用read命令完整读取文件(保留所有格式)

使用read的特殊选项读取整个XML文件,确保换行、空格和特殊字符完全保留:

# 读取整个XML文件到变量,保留原始格式
IFS= read -r -d '' labelContent < your-label.xml

# 发送打印请求
curl -X POST \
  -H "Content-Type: application/xml" \
  -d "$labelContent" \
  http://your-dymo-service-url
  • IFS=:防止文件开头的空格被截断
  • -r:禁止反斜杠被解析为转义字符
  • -d '':以空字符作为读取结束标记,确保读取到文件末尾

2. 让curl直接读取文件(最稳妥,跳过变量中转)

curl支持直接读取文件作为POST数据,完全避免shell变量处理带来的格式问题:

curl -X POST \
  -H "Content-Type: application/xml" \
  --data-binary @your-label.xml \
  http://your-dymo-service-url
  • --data-binary @filename:会原封不动发送文件内容,包括所有换行、特殊字符,不会被shell修改

3. 修复文件格式问题(如果是隐形字符导致)

如果XML文件带有Windows换行符(CRLF)或编码错误,也会触发验证失败:

  • 转成Unix换行符:
dos2unix your-label.xml
  • 检查并转换编码为UTF-8:
# 查看文件编码
file -i your-label.xml
# 转换为UTF-8(假设原编码是ISO-8859-1)
iconv -f ISO-8859-1 -t UTF-8 your-label.xml > fixed-label.xml

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:35:07