数据URI默认字符集

5

数据URI是否有默认字符集?我阅读了规范,但没有看到一个。

例如,如果我有一个用于源映射的数据URI,我希望它可以可靠地在各种浏览器中解释,省略字符集是否可以?

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

对比

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

我在这个GitHub问题中看到有人在没有显式添加charset=utf-8的情况下在源映射文件中使用中文字符时遇到了问题。因此,如果存在默认值(或者至少我们可以期望浏览器选择一个),似乎utf-8并不是其中之一...


这与数据URI本身无关,而是与数据的解释有关。JSON有一个标准,只支持UTF-8编码,但这是相对较近的变化,之前的标准要求它必须是几种Unicode编码中的一种,在有效JSON的上下文中很容易区分。因此,如果您假设符合过去或现在的JSON标准,则不需要在application/json MIME类型上使用charset。如果JSON不符合标准,建议尽可能接近源代码进行转换(如适用,同时提交错误报告)。 - Tom Blodget
1个回答

1
根据RFC 2397 § 2,未指定charset的数据URI默认为US-ASCII。因为每个Base64编码的URI仅使用ASCII字符。此外,“所有US-ASCII字符串都变成了有效的UTF-8”,这意味着在许多情况下存在“相当好的向后兼容性”。1 然而,在2019年,UTF-8实现仍然不够均衡。因此 - 并且由于显式调用charset对于已经不太用户友好的数据URI几乎没有成本 - 在您的源地图URI中包括charset=utf-8可能是一个不错的主意,以便在各种浏览器中可靠地解释它们。
  1. Arjun Chaudhary的回答:UTF-8和UTF-16之间有很大的区别吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接