我的老板分配给我一项任务,即在我们的前端网站上运行的电子邮件服务器上正确显示所有国际字符。该网站使用asp-classic。
我查看了我们的 mail_body.asp 代码,以了解服务器如何处理从 POP3 接收的文本文件,这就是我发现的:
Set bobj = Server.CreateObject("Basp21")
If InStr(UCase(filecontent),"?UTF-8?") > 0 or InStr(UCase(filecontent),"CHARSET=""UTF-8""" ) > 0 Then
bobj.CodePage = 65001
ElseIf InStr(UCase(filecontent),"EUC-KR") or InStr(UCase(filecontent),"KS_C_5601-1987") > 0 or InStr(UCase(filecontent),"CONTENT-TRANSFER-ENCODING: BASE64") > 0 Then
bobj.CodePage = 949
'response.Write "euc-kr"
'response.Write "UTF-8"
ElseIf InStr(UCase(filecontent),"CHARSET=JOHAB") > 0 Then
bobj.CodePage = 1361
'response.Write "JOHAB"
ElseIf InStr(UCase(filecontent),"CHARSET=X-MAC-KOREAN") > 0 Then
bobj.CodePage = 10003
'response.Write "X-MAC-KOREAN"
ElseIf InStr(UCase(filecontent),"CHARSET=X-EBCDIC-KOREANEXTENDED") > 0 Then
bobj.CodePage = 20833
'response.Write "X-EBCDIC-KOREAN"
ElseIf InStr(UCase(filecontent),"CHARSET=ISO-2022-KR") > 0 Then
bobj.CodePage = 50225
'response.Write "ISO-2022-KR"
ElseIf InStr(UCase(filecontent),"CHARSET=""GB2312""") > 0 or InStr(UCase(filecontent),"CHARSET=GB2312") Then
bobj.CodePage = 936
Else
bobj.CodePage = 65001
End If
...
outarray=bobj.ReadMail(contents,"subject:to:from:date:X-OriginalArrivalTime:",dirname)
我认为可以肯定地说上面的代码一点也不优雅,但它在很大程度上完成了工作。这是一个韩国网站,因此代码正在寻找非 unicode 但用韩语编写的标头。否则,它假定收到的电子邮件是 UTF-8。
因此,每当邮件的字符集不是 UTF-8 以及代码中定义的任何韩语代码页时,解析的文本都会变得混乱。
因为我的老板要求我“让电子邮件内容显示所有国际字符”,所以我能想到的唯一解决方案是彻底检查此处列出的所有标题可以包含的字符集并适当地设置代码页但是这个似乎不是一个好的解决方案。
我想知道这里将采取什么实际方法。许多电子邮件服务(如 hotmail 和 gmail)在显示国际字符时没有问题,所以如果可能的话,我想知道他们是如何解决这类问题的。