A-A+

Becky中某些邮件标题乱码的真正原因

2009年03月02日 学习随笔 暂无评论 阅读 1 次

来源地址: http://www.newsmth.net/frames.html?mainurl=/bbstcon.php%3Fboard%3DNewSof...

发信人: Xbeta (推佳软,减盗版,和谐进步!), 信区: NewSoftware
标 题: 与Becky用户讨论一个乱码问题 (谢beckyer,基本解决)
发信站: 水木社区 (Mon Jul 2 09:43:02 2007), 站内

十分感谢beckyer网友!真是高手啊。
----------------------------------------------
Becky中某些邮件标题乱码的真正原因

[1] 引言:Becky简介
  邮件客户端,共享软件,日本产。如果说功能性能,xbeta认为,只有共享的TheBat还可一比,其他免费或开源的Thunderbird、 Foxmail、DreamMail、KooMail在细节上还有很大差距。它功能极多、性能极佳、个性化极强、而体积极小(一个exe就可用,仅 2.5MB;完整安装4.5MB),支持第3方插件。

[2] 引言:Becky与乱码
  新手认为Becky容易出现乱码。这纯属设置问题。其原因与解决在网上有很多。而老手知道,Becky在处理多种语言、编码、字体方面极好,很多高手称从未遇到过Becky不能解决的乱码—— 我以前也这样认为。而今天发现,有2组邮件(参见附件),均为UTF8编码,均是由程序(而非Email客户端)生成,Becky显示其标题有乱码,而 Thunderbird正常。
  经研究,这不是设置问题,而是Becky本身bug,先请大家指正,再通知作者。
环境:070630;WinXP+sp2中文版,Becky2.31汉化版及英文版。

[3] 案例1:utf8 vs utf-8
  信件1来自yo2.cn博客程序,也就是WordPress。标题应为“[善用佳软-test-yo2] 评论: 《善用Wink,将电脑操作录屏为flash》”,Becky显示为“[鍠勭敤浣宠蒋-test-yo2] 璇勮: 銆婂杽鐢╓ink锛屽皢鐢佃剳鎿嶄綔褰曞睆涓篺lash銆”。
  为分析原因,用Thunderbird与becky各写一封同编码同标题的信,发现它们均正常。将它们与信件1进行比较,发现信件1源文件中:

Subject: =?utf8?B?W+WWhOeUqOS9s+i9ry10ZXN0LXlvMl0g6K+E6K66OiDjgIrlloTnlKhXaW5r77yM5bCG55S16ISR5pON5L2c5b2V5bGP5Li6Zmxhc2jjgIs=?=

而Thunderbird/Becky生成的信件中,则不是=?utf8……,而是=?utf-8……,区别为“-”。看来是它导致了Becky未识出 utf8。
  解决:显示源文件,进入直接编辑模式,在Subject中,手工加“-”。操作后,邮件即显示正常。也就是说,对于标题乱码邮件,可查其编码。如果为UTF-8,再查其header之标题。如果为utf8...,则改为utf-8...可解决问题。
  高手beckyer的正解:进入becky的语言设定,在utf-8的charset里,增加一个UTF8,变成“UTF-8, UTF8”,可以解决。email中编码不规则的写法很常见,好在becky!可以自由添加定义,算是解决这个难题。 

[4] 案例2:不声明编码
  信件2也是博客对评论提醒,标题应为“[TechPush] New Comment On: Evernote 2.0发布”,becky显示为“[TechPush] New Comment On: Evernote 2.0鍙戝竷”。
  查源文件,得 “Subject: [TechPush] New Comment On: Evernote 2.0鍙戝竷”,存为eml文件并按二进制显示,最后汉字的编码为E5 8F 91 E5 B8 83,正是“发布”的utf8编码。如果用Thunderbird或becky生成邮件,则是“Subject: [TechPush] New Comment On: Evernote =?UTF-8?B?Mi4w5Y+R5biD?=”
  也就是说,当无编码声明时,Becky无法识别它是UTF-8。此情况下,我想不出在Becky中修正的办法。
  高手beckyer补充:关于第二个问题,它的标题是8位data的,不适用于任何编码(包括UTF-8),becky!用windows的默认 codepgae直接显示它,无可厚非。好在becky!的头信息显示可以自由地进行编码切换,加上直接编辑功能,这个问题也算解决了。
  具体是,进入头信息显示,切换到UTF-8就行了。

[5] 其他
  在txt中可手工重现上述乱码。将VIM设为utf-8无bomb方式,贴入正确的标题文字,存为txt。然后在Total Commander中F3查看,因为无bomb,所以TC Lister认为它是ansi编码,显示出来的乱码与Becky完全相同。也可在VIM中输入文字后,强行 :set enc=prc,也能得到相同的乱码。或许,从中也可以得到启示,到底Becky问题出在何处。注:VIM、TC Liseter也可以换用类似功能的软件。又注:notepad其实很聪明,它不是用bomb区分utf8还是ansi。
  信件utf-8编码指什么?不是指全部,而是仅指body。在header中,是每个字段,如标题、收信人各自声明编码,它们可以不同。也就是说,你可以直接编辑header,让收信人的名字用GB2312编码,而标题用UTF-8编码。我试过,可以。
  再解释一下其他文章所讲的新手遇到的编码,很多时候是一种“显示乱码”。即becky已经正确解出了这个汉字,但用了英文字体,所以显示成了乱码——请你设想一下,逼着你用甲骨文写一个字母a会得到什么结果。这一点本来很容易理解,因为在英文字体中,根本没有汉字。但因为Windows(我猜)采用了一种智能替代的机制——比如,在notepad或ms word中,你将中英文统统指定为Airal字体,也能显示中文,是因为这些程序能猜出某些字符其实是中文,所以没理会Arial,而采用了默认的中文字体来显示。这种聪明解决了问题,或者说掩盖了问题。但becky没有这样做。
  beckyer补充:arial字体在becky里显示汉字没有问题(win2k/xp下),同其他软件一样,使用了windows的字体关联技术。
  xbeta补充:这是我随便举了一个例子。那新手的乱码问题,要把某字符集下面的字体改为中文宋体即可,是怎么回事?或者说,有些字体未采用关联技术?
  beckyer:你说的情况可能是:(1) 用的是windows98 (2)becky语言设定中,字库旁边没有勾上unicode字样。呵呵,猜测而已。

  说到底,就是数据规范不统一,程序就要体贴些智能些宽容些。这样或许有纵容,但对用户确实方便。IE与Opera、Firefox也是此理。
  因为我不懂技术,很多原理都是从应用而逆猜出来的,所以不能保证全正确。因为Thunderbird能正确显示,所以,也不一定是原信件编码不规范。如果这样,则更应提醒Becky作者进行改进了。

给我留言

Copyright © 浩然东方 保留所有权利.   Theme  Ality 07032740

用户登录