各位老铁们好,相信很多人对quoted-printable都不是特别的了解,因此呢,今天就来为大家分享下关于quoted-printable以及quoted-printable编码 在线的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
在互联网的世界里,数据传输的安全性至关重要。而在这个过程中,quoted-printable编码作为一种常见的编码方式,扮演着不可或缺的角色。什么是quoted-printable编码?它又是如何工作的呢?本文将带您深入了解这种编码方式,让您对它有更全面的认识。
一、什么是quoted-printable编码?
简单来说,quoted-printable编码是一种将二进制数据转换为文本数据的编码方式。它主要用于在电子邮件、网页等场景中传输非ASCII字符。与UTF-8、GB2312等编码方式相比,quoted-printable编码具有以下特点:
1. 兼容性强:quoted-printable编码可以兼容ASCII字符集,因此在传输过程中不会出现乱码现象。
2. 易于阅读:由于quoted-printable编码使用的是可打印字符,因此用户可以轻松地阅读和编辑编码后的数据。
3. 易于解析:与其他编码方式相比,quoted-printable编码的解析过程相对简单,便于实现。
二、quoted-printable编码的工作原理
quoted-printable编码的工作原理是将二进制数据转换为可打印字符,具体步骤如下:
1. 查找非ASCII字符:找到需要编码的二进制数据中的非ASCII字符。
2. 转换为可打印字符:将每个非ASCII字符转换为对应的可打印字符。例如,将字符“?”转换为“=3F”。
3. 添加填充字符:为了确保编码后的数据长度为4的倍数,需要在编码后的数据中添加填充字符“=”。
4. 编码后的数据:将转换后的可打印字符和填充字符组合在一起,形成最终的编码数据。
三、quoted-printable编码的应用场景
1. 电子邮件:在电子邮件中,quoted-printable编码可以用于传输非ASCII字符,如表情符号、特殊符号等。
2. 网页:在网页中,quoted-printable编码可以用于显示特殊字符,如HTML标签、CSS样式等。
3. 其他场景:除了电子邮件和网页,quoted-printable编码还可以应用于其他场景,如文件传输、数据库存储等。
四、如何使用quoted-printable编码
以下是一个简单的示例,展示如何使用quoted-printable编码:
“`python
import quopri
需要编码的二进制数据
data = b”
如何用Perl发送邮件
使用Perl发送邮件有很多方式,随便可数出来的有:
mail,
sendmail,
Mail::Mailer,
MIME::Lite
等等。这些方式都能实现邮件的发送,具体的就要看用在什么场合了。
1. mail方式
这个调用系统命令,算是最简单的方式了(我亲自测试可用)
my$mail_title=”test_mail”;
my$mail_body=”ffmpeg error”;
my$mail_to='xxxxxx@qq.com';
my$cmd_mail=”echo$mail_body\|mail-s$mail_title-cb$mail_to”;
system($cmd_mail);
2. Mail::Mailer方式
#!/usr/bin/perl
use Mail::Mailer;
my$from_address='';
my$to_address='xxxxxxxx@qq.com>';
my$subject=”mail title”;
my$mail_body=”hello world!”;
my$mailer= Mail::Mailer->new(“sendmail”);
my$mailer->open({ From=>$from_address,
To=>$to_address,
Subject=>$subject,
})or die(“Can't open:$!\n”);
print$mailer$mail_body;
$mailer->close();
3. MIME::Lite方式
一般邮件发送(我亲自测试通过).
#!/usr/bin/perl
use MIME::Lite;
use MIME::Words qw(encode_mimewords);
my$subject= encode_mimewords(“test mail”,'Charset','GB2312');
my$data=”test”;
my$to_address='xxxxxxx@qq.com';
my$msg= MIME::Lite->new(
From=>'root@localhost',
To=>$to_address,
Subject=>$subject,
Type=>'text/html',
Data=>$data,
Encoding=>'base64',
) or die”create container failed:$!”;
$msg->attr('content-type.charset'=>'GB2312');
$msg->send('smtp','localhost',Debug=>0);
如果上述程序遇到下述的出错提示:
SMTP mail() command failed:
5.5.4<root@localhost>… Real domain name required for sender address
则需要检查你主机名,
#cat/etc/hosts
并将“root@localhost”替换成“root@hostname”
另外,还可以使用MIME::Lite来发送中文HTML邮件,防止被ESP当作垃圾邮件干掉。
(摘自)
use MIME::Lite;
use MIME::Words qw(encode_mimewords);
sub send_email{
my$self= shift;
my$to_address= shift;
my$subject= encode_mimewords(“这里是中文标题”,'Charset','GB2312');
my$data=<<EOF;
<body>
<p>这里是中文HTML内容。</p>
</body>
EOF
my$msg= MIME::Lite->new(
From=>'you@example.com',
To=>$to_address,
Subject=>$subject,
Type=>'text/html',
Data=>$data,
Encoding=>'base64',
) or die”create container failed:$!”;
$msg->attr('content-type.charset'=>'GB2312');
$msg->send('smtp','localhost',Debug=>0);
}
几个常识点:
a.标题必须用MIME::Words编码,很多人忽略了这点。
b. MIME::Lite构造信件时,Type不要搞错。例如只是一封HTML邮件,没有附件之类,Type就是text/html。
21CN的webmail发信不管有没有附件,Type都是multipart/mixed,结果被Gmail直接扔进垃圾箱。
c.信件要选择传输编码(Encoding),常用的是base64和quoted-printable,我推荐base64。
d.信件body的content-type charset要设置正确,例如中文GB2312。
e.最后一句$msg->send('smtp','localhost',Debug=>0)调用Net::SMTP发信,本机安装了MTA例如Postfix就可以。这个发信IP最好是信誉比较好的IP,没有列入sorbs、spamcop、spamhaus等RBL列表里。
f.发信IP最好有反向解析(PTR),否则肯定发不到AOL之类的验证反解的邮箱。
g.那个From地址也最好真实存在,但是不要用知名网站的免费邮箱,例如From=>'abc@126.com',那么基本发不出去。
为什么?因为126.com设置了SPF,接收方MTA多半会验证这个SPF,你的IP当然不在126的SPF里,所以通不过验证。
h.$data变量包含的是信件body的HTML编码,这个body里不要有很多链接、图片之类,否则容易被Spamassassin之类的反垃圾软件干掉。
i.最后,控制发送频率,大量的发送会引起各个反垃圾系统的警惕,并将你列入黑名单
4. Mail::Sendmail方式
JMail 接收邮件的问题
当你收到乱码邮件后,如果让对方重发一次,既浪费时间,又显得你“露怯”,不如通过尝试以下方法自行解码:
1.根本设置对OutlookExpress进行根本设置,可彻底解决电子邮件的乱码。打开OutlookExpress后,选择“工具”→“选项”命令,单击“阅读”标签,再单击“字体”按钮,选择“简体中文(GB2312)”,同时把它设置为默认值。接下来,单击“国际设置”按钮,选中“为接收的所有的邮件使用默认的编码”,确定退出。如此设置后,当你打开所有邮件,通常都不会再出现乱码了。
2.选项查看通常情况下,没有进行上述邮件设置,导致邮件乱码情况居多。在OutlookExpress中,选择乱码邮件后,单击“查看”→“编码”→“简体中文(GB2312)”或“其他”→“简体中文(HZ)”,邮件内容即可展现。
3.转寄再收如仍显示乱码,可试着将乱码邮件转寄到自己的邮箱中,然后用OutlookExpress接收,有时即可顺利解码。
4.改名重读仍然不行可将邮件改名,存成一个后缀名为.eml的文件,由OutlookExpress打开一般都可以自动解码。
5.追根溯源对于采用不同编码标准产生的乱码邮件,解码工作比较专业,说起来会很生涩。我们不妨选择乱码邮件后,右键单击鼠标,在弹出的快捷菜单中选择“属性”命令,接着在出现的对话框中单击“详细资料”标签,再单击“邮件源文件”按钮,这时就会打开邮件源文件码,邮件内容显现。
6.巧妙骗解如问题仍得不到解决,接上一步操作,右键单击,选“复制”,将“邮件源文件”拷贝到系统的剪贴板上,然后用记事本将其打开。在邮件信头中添加Mime-Version:1.0Content-Transfer-Encoding:quoted-printable,注意信头中间不要空行,信头和信体之间要有一个空行,保存为.txt纯文本文件。接下来用资源管理器将其改名为.uue为后缀的文件并运行,这时会自动调用WinZip并“骗取”它来对乱码邮件进行解码工作,进而正确显示编码邮件的“庐山真面目”。
7.代码替换将乱码邮件存为一个.eml的文件,用记事本打开。然后打开一个正常邮件,选择并复制一呗代码:
Content-Type:text:/plain;
charset=“GB2312”
Content-Transfer-Encoding:quotedprintable
替换粘贴到乱码邮件的相应位置,保存后关闭邮件。这时乱码邮件变为正常邮件。
8.优化重组很多的邮件编辑软件以字符为单位处理文本,双字节的汉字被删除一半后,剩余部分会和相邻的汉字重新组合,使得文本面目全非。我们收到的绝大多数邮件属于此类。判断这类邮件时,只要乱码内容有很多“=”号,即可肯定为QP编码的邮件。这时我们需要将乱码邮件存成一个文本文件,然后使用以字符为单位的编辑软件,将乱码行的第一个字符删除。笔者有一个很笨但十分有效的办法,就是将乱码连接起来,不管多长,发现内容之间有两个“=”号,去掉其中的一个多余“=”号,后面的部分就会和相邻的乱码重新组成可识别的汉字。如果以上方法均不能奏效,则可以判断收到的乱码邮件未经过编码造成第8位字节滤掉而成为无法还原的死乱码文档,只好请对方重发邮件给你了。参考资料:百度一下
utf-7的简介
SMTP为基本的电子邮件传输标准之一,其指明了传输格式为 US-ASCII,并且不允许超过 ASCII所定义的字元范围以外的位元值,也就是说八位元的字串将无法正常的被传输。 MIME(RFC 2045~ 2049)扩展了网路邮件以支援不同的媒体类型以及字元集,包含 UTF-8与 UTF-16的字元集皆可被指定使用。但由于 MIME并未明确将 Unicode定义为可支援的字元集,并且也没有说明其应如何编码,这使得既有的 SMTP传输架构下仍旧无法保证可正确的处理 8位元资料。base64编码也有其问题,例如甚至连纯英文的 US-ASCII字元也可能会变成不可辨认;至于像是 UTF-8与 quoted-printable的编码结合,则需要 6~ 9个位元来为非 ASCII的字元(Unicode的基本多文种平面中定义的字元)进行编码,至于在基本多文种平面(BMP)以外的字原则需要多达 12位元的长度才能完成编码,这显得相当没有效率。
UTF-7首次被提出是在一个实验性的通讯协定里(RFC 1642,A Mail-Safe Transformation Format of Unicode),这份 RFC(Request for Comments)提案后来因 RFC 2152的提出而被取代(RFC 2152本身为新闻型(informational)的文案)。在 RFC 2152当中明确的指出该份 RFC本身不为网际网路的标准做出任何明确的定义(明列于文案前头的 Status of this Memo)。尽管这份 RFC 2152在 IANA(Internet Assigned Numbers Authority)的字元集列表里被引述为 UTF-7,然而 UTF-7本身并非 Unicode的标准之一,即使在目前最新的 Unicode 5.0里也仅列出 UTF-8、 UTF-16和 UTF-32。
如同引言所提到的,由于在过去 SMTP的传输仅能接受 7位元的字元,而当时 Unicode并无法直接满足既有的 SMTP传输限制,在这样地背景下 UTF-7被提出。严格来说 UTF-7不能算是 Unicode所定义的字元集之一,较精确的来说, UTF-7是提供了一种将 Unicode转换为 7位元 US-ASCII字元的转换方式。
有些字元本身可以直接以单一的 ASCII字元来呈现。第一个群组被称作“direct characters”,其中包含了 62个数字与英文字母,以及包含了九个符号字元:'(),-./:?。这些“direct characters”被认为可以很安全的直接在文件里呈现。另一个主要的群组称作“optional direct characters”,其中包含了所有可被列印的字元,这些字元在 U+0020~ U+007E之间,除了~ \+和空白字元以外。这些“optional direct characters”的使用虽可减少空间的使用也可增加人的可阅读性,但却会因为一些不良设计的邮件闸道而会产生一些错误,导致必须使用额外的跳脱字元。
空白字元、Tab字元、以及换行字元一般虽也可直接是为单一的 ASCII字元来使用,然而,若是邮件中有使用了编码过的字串,则必须特别注意这些字元有无被使用在其他地方。
其他的字元则必须被编码成 UTF-16然后转换为修改的 Base64。这些区块的开头会以+符号来标示,结尾则以任何不在 Base64里定义的字元来标示。
好了,文章到这里就结束啦,如果本次分享的quoted-printable和quoted-printable编码 在线问题对您有所帮助,还望关注下本站哦!




