Quoted-Printable编码原理及代码实现

本文介绍了Quoted-Printable编码原理,包括编码规范和Erlang实现细节。编码规范涉及字节表示、换行处理、字符编码选择等,Erlang实现则展示了如何遵循这些规则进行编码,特别提到了integer_to_list/2函数和模式匹配技巧的应用。
摘要由CSDN通过智能技术生成

这篇文章是我之前在RYTong内部分享的一篇文章,摘取了有用的部分。当时帮助某项目邮件系统解决问题,期间了解到Quoted-Printable编码,在此与大家分享下该编码的原理和个人版本的代码实现。

关于规范

关于Quoted-Printable的编码规范,需要参考rfc2045

为了方便大家阅读,在此给大家看一下融合我个人理解的翻译:

  1. 除了换行(CRLF序列)中的CR或LF,所有(8bit)字节都可以表示为符号”=”后跟两个16进制数字(16进制数字表示该字节的值)的格式,16进制数字只能有数字和大写ABCDEF表示,不能用小写字母。例如,ASCII码换页符,数值为12,编码后表示为”=0C”。

  2. 值为33到126的字节(除61外),包含边界,也可以不进行编码。

  3. 制表符(值为9)和空格(值为32)可以不进行编码,但未编码的两者不能位于编码后的行尾。如果行尾由软换行符(符号”=”,参照规则5)时,软换行符前的制表符和空格可以不编码。两者若在行尾则必须编码。

  4. 换行(CRLF序列)不必进行编码。因为只有CRLF序列表示换行,因此包含CR或LF的其他序列须进行编码。

  5. Quoted-Printable编码要求编码后的文本每行长度不得超过76字符。如果原文的一行被编码后的文本长度超过76,那么需要在编码后的行尾添加软换行符”=”,表示原文此处没有换行。注意软换行符”=”也会计入编码后的字节长度,也就是说如果编码后行尾存在软换行符,那么该行其他字符数不得超过75。

  6. 建议对-!\”#$@[\]^`{|}~进行编码,以避免对其他协议或少数网关(如EBCDIC)的处理造成影响。

  7. 建议对CRLF序列进行编码,避免各平台不同的换行序列对解码造成影响。

关于代码实现

以下是本人基于以上规则实现的代码(Erlang实现)

-module(qp_encoder).

-export([qp_encode/1]).

-define(LINE_LENGTH, 76).
-define(is_suggested(C),
        C == 45 orelse C == 64 orelse C == 96 orelse C == 46 orelse
            (C >= 33 andalso C =< 36) orelse
            (C >= 91 andalso C =< 94) orelse
            (C >= 123 andalso 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值