关于RFC 2046中attribute/value notation规范及MIME类型解析规则的问询
MIME类型字符串解析规则(非邮件AMQP场景适用)
你要找的MIME参数语法规则其实定义在RFC 2045中,RFC 2046仅提到了“attribute/value notation”但未展开细节。核心规则用简化BNF呈现如下:
核心语法规则
- 参数基本结构:
parameter := attribute "=" value - 属性名:仅允许ASCII字母、数字、连字符,不区分大小写(比如
charset和CHARSET视为同一属性) - 值的两种合法形式:
- 无引号值:由ASCII字母、数字,以及
!#$%&'*+-^_{|}~`这类特殊字符组成,禁止包含空格、引号、逗号 - 带引号值:必须用双引号(
")包裹,内部可包含空格、逗号等特殊字符;转义规则为用反斜杠(\)转义双引号和反斜杠本身,例如"hello\"world"实际对应hello"world
- 无引号值:由ASCII字母、数字,以及
- 空格处理:属性名与
=之间、=与值之间可存在任意数量空格(包括0个),但带引号值内部的空格会被保留为值的一部分 - 参数分隔:多个参数用逗号(
,)分隔,逗号前后可添加任意空格
AMQP场景实用建议
在AMQP场景中使用MIME类型时,尽量严格遵循标准规则以避免兼容问题:
- 不要用单引号包裹值,这不符合标准规范,仅部分实现可能兼容
- 无引号值内禁止添加空格,即使部分解析器能处理,也会引发解析歧义
- 属性名优先使用小写,这是行业通用约定,能减少不必要的兼容风险
内容的提问来源于stack exchange,提问作者Philip Couling
相关产品推荐
相关产品推荐

