首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定电子邮件字符集

确定电子邮件字符集
EN

Stack Overflow用户
提问于 2012-11-27 16:10:52
回答 1查看 266关注 0票数 0

我的老板给我布置了一项任务,让我在我们的前端网站上运行的电子邮件服务器上正确显示所有国际字符。该网站使用asp-classic。

我查看了我们的mail_body.asp代码,看看服务器是如何处理从POP3收到的文本文件的,我发现了以下内容:

代码语言:javascript
复制
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,并且代码中包含任何已定义的韩语代码页,解析后的文本就会变得混乱。

因为我的老板要求我“使电子邮件内容显示所有国际字符”,所以我能想到的唯一解决方案是exhaustively check for all character sets listed here which the header can contain并适当地设置代码页,但这似乎不是一个好的解决方案。

我想知道这里采取的实际方法是什么。许多电子邮件服务,如hotmail和gmail,显示国际字符都没有问题,所以我想知道他们是如何处理这类问题的,如果可能的话。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-27 16:20:48

实用的方法是解析出charset=*的值,并将内容转换为某种统一的内部编码。伪代码(因为我根本不是ASP人员):

代码语言:javascript
复制
charset  = parseMailHeaders(mail.headers, 'charset')  // e.g. 'ISO-2022-KR'
mailBody = convertEncoding(charset, 'UTF-16', mail.body)

假设的parseMailHeaders从适当的邮件头中提取charset=*的值。根据假设的convertEncoding函数接受的值,您可能需要对提取的charset值进行一些标准化,但基本上就是这样。从那时起,您就知道内容是UTF-16编码的,可以将其视为UTF-16编码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13579821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档