【问题标题】:Data URI default charset数据 URI 默认字符集
【发布时间】:2024-01-06 22:41:01
【问题描述】:

是否有数据 URI 的默认字符集?我读了the spec,但没有看到。

例如,如果我有一个源映射的数据 URI,我希望它可以跨浏览器可靠地解释,那么省略字符集是否可以?

//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJza...

//@ sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJza...

我在this GitHub issue 中看到人们在没有明确charset=utf-8 的源映射文件中使用中文字符时遇到了问题。因此,如果有一个默认值(或者,至少,如果我们可以预期浏览器会选择一个),那么utf-8 似乎不是那个...

【问题讨论】:

  • 这与数据 URI 本身无关,而是与数据的解释有关。 JSON 有一个标准,它只是 UTF-8,但这是一个相对较新的标准变化,它必须是在有效 JSON 的上下文中容易区分的几种 Unicode 编码之一。因此,如果您假设符合过去或现在的 JSON 标准,则应用程序/json MIME 类型上的字符集是不必要的。如果 JSON 是非标准的,我建议将其转换为尽可能接近源代码(并在适用时提交错误报告)。

标签: character-encoding uri source-maps data-uri data-uri-scheme


【解决方案1】:

根据RFC 2397 § 2没有指定charset 的数据URI 默认为US-ASCII。因为every Base64-encoded URI uses only ASCII characters。此外,“所有 US-ASCII 字符串都变为有效的 UTF-8”,这意味着“在许多情况下都具有良好的向后兼容性”。1

尽管如此,UTF-8 的实施在 2019 年仍然不平衡。正因为如此 - 并且因为显式调用 charset 到已经对用户不友好的数据 URI 的成本很小 - 可能不是一个坏主意在源映射 URI 中包含 charset=utf-8,以确保它们在浏览器之间得到可靠解释。


  1. Arjun Chaudhary 对Is there a drastic difference between UTF-8 and UTF-16 的回答。

【讨论】: