【发布时间】:2017-07-31 15:43:54
【问题描述】:
我有一个 JAX-RS REST-Service,它生成一个 CSV 文件并将其流式传输回浏览器。一切都设置为 UTF-8,所以我通过浏览器下载的文件也是一个有效的 UTF-8 文件(没有 BOM),它在 Notepad++、Sublime 等中向我显示了有效、可读的 UTF-8 变音符号等。
虽然在 Excel 中打开这样的文件会导致不可读的元音变音等,因为 Excel 显然试图用另一个字符集打开它(我猜是 CP-1252,但这并不重要)。
通过 Notepad++ 使用 BOM 保存文件并在 Excel 中重新打开它的效果很好。似乎检测 BOM 是 Excel 用于检测 UTF-8 的唯一方法。无论如何 - 我认为添加 BOM 会有所帮助...
做到了。结果相同。过了一会儿,我发现 BOM 在某些情况下会被删除:如果我在 BOM 之前添加任何字符,我可以在我的 Hex-Editor 中看到 BOM。删除该字符后,BOM 将不再存在。
当我继续通过 cURL 下载文件时,我真的很惊讶。 BOM 就在那里!在那之前,我认为这可能与我的应用程序、Content-Types、Encodigs、HTTP Headers 等有关 - 但它们似乎都很好。
现在,经过数小时尝试不同的事情,我有什么想法可以告诉浏览器保留 BOM 吗?我可以设置任何 HTTP 标头吗?由于 Chrome、Internet Explorer、Edge、Firefox 都删除了 BOM,这听起来有点像我的浏览器约定...
非常感谢您高度赞赏的帮助!
编辑:感谢 sideshowbarker 的回答,我找到了一种解决方法,方法是在内容前添加两个 BOM,因此在浏览器删除第一个 BOM 后会剩下一个 BOM。
【问题讨论】:
标签: curl browser utf-8 jax-rs byte-order-mark