朋友们,美好的一天! 在不久的将来,我发现自己是一个有趣的难题,我决定为Android编写“拨号程序”。 该应用程序将与系统中的联系人同步并执行某些操作。 quoted-printable的作用和它的含义以及我为什么需要它有关-我在文章中讲述。
因此,quoted-printable是一个使用可打印的ASCII字符将二进制文本编码为文本,并根据Wikipedia英文版中的页面进行判断的系统,它用于对电子邮件中的数据进行编码/解码。
实际上,这并非完全正确。 有这样的文件格式-vCard。 并以这种格式从任何Android智能手机导入/导出联系人。 因此,2.1版中的这种格式(扩展名为.vcf)也使用带引号的可打印编码。 这种编码的西里尔字母的形式为(示例): "=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D1=82"
,即 首先,每个西里尔字母都以UTF-8编码为两个字节的序列,然后每个字节以十六进制表示形式写入,其符号等于“ =”。
并以这种形式导入所有带有西里尔字母的联系人。 显然,没有读取和编辑文件的问题。 这正是我所需要的。 我尝试通过文本编辑器中的插件...是的,您可以解决此问题,但是操作过多。 简而言之,我不得不坐下来编写解码器。
在此过程中,我遇到了另一个障碍。 事实是,带引号的可打印编码标准提供最大长度为75个字符的行,然后加上连字符,复制字符“ =”。 花了一个附加功能来组合换行。
该脚本使用quopri模块(我立即导入,未安装)。
import quopri import os List_contact = [] File = ".vcf" with open (File) as file:
脚本的结果。 从表格的行:
BEGIN:VCARD VERSION:2.1 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;=D0=90=D0=BD=D0=B4=D1=80=D0= =B5=D0=B9;;; FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=D0=90=D0=BD=D0=B4=D1=80=D0= =B5=D0=B9 TEL;CELL;PREF:80000000000 END:VCARD BEGIN:VCARD VERSION:2.1 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;=D0=92=D0=B8=D0=BA=D1=82=D0= =BE=D1=80 =D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B5=D0=B2=D0=B8=D1=87;;; FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=D0=92=D0=B8=D0=BA=D1=82=D0= =BE=D1=80 =D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B5=D0=B2=D0=B8=D1=87 TEL;CELL;PREF:80000000000 END:VCARD
我们得到:
BEGIN:VCARD VERSION:2.1 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;;;; FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE: TEL;CELL;PREF:80000000000 END:VCARD BEGIN:VCARD VERSION:2.1 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:; ;;; FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE: TEL;CELL;PREF:80000000000 END:VCARD
编辑文件后,如有必要,我们执行反向编码:
List_contact_2 = [] with open('Contacts_Decode.txt') as file: for i in file: List_contact_2.append(i) with open('_New.vcf', 'w') as file: for i in List_contact_2: Str_1 = bytes(i, 'UTF-8') Str_2 = quopri.encodestring(Str_1) Str_3 = Str_2.decode('UTF-8')
实际上,就此而言,可以完成,但还有更多 开个玩笑 的东西。 我发现用quoted-printable编码的行奇怪地类似于每个人可能在浏览器地址栏中遇到的某些URL,只是代替了带有“%”号的“ =”号。 查看(示例) "%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82"
。 你会怎么想? 是的是的 显然,这也是引用可打印的(您将需要询问html-masters)。 如上所述,只要将“%”替换为“ =”,所有内容都会解码为西里尔字母。
哦是的 我完全忘记了 如果您突然需要某人,则中文字符和阿拉伯字母的解码方式与西里尔字母(个人检查)相同。
好吧,朋友,再见,也许这对我的工作没有多大用处。