首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用本机Javascript进行IMAP UTF-7转换

使用本机Javascript进行IMAP UTF-7转换
EN

Stack Overflow用户
提问于 2020-03-22 05:44:25
回答 1查看 130关注 0票数 0

我一直试图得到一个好的代码,将提供转换为JS的UTF7邮箱到UTF-16字符串的Javascript句柄。似乎没有这样的工作完成。你们中有谁造了一个或者有一个可以分享吗?我很乐意构建一个,但如果有人已经拥有它,我就不想这样做了。

当我查看规范时,它看起来像是'&‘和'-’之间的字符串首先用base64解码,然后解码为UTF-16Big Endian,反向过程是将非ascii文本编码为UTF-16部分,然后是base64。对于文件安全操作,base64 +/表示为+,在其他情况下表示为+_。

如果有人有解决方案,请让我知道,我很乐意使用它,或者编写一个并将其放在Github中!

谢谢

Vijay

EN

回答 1

Stack Overflow用户

发布于 2020-03-22 10:01:42

我想我找到了一个足够简单的解决方案,因为没有人响应。希望有人会发现这个小脚本对转换UTF7有帮助

代码语言:javascript
复制
>z='Συστήματα_Ανίχνευσης_Εισ & related security.pdf'
>encode_imap_utf7(z)
"&A6MDxQPDA8QDtwMBA7wDsQPEA7E-_&A5EDvQO5AwEDxwO9A7UDxQPDA7cDwg-_&A5UDuQPD- &- related security.pdf"
>decode_imap_utf7(encode_imap_utf7(z))
"Συστήματα_Ανίχνευσης_Εισ & related security.pdf"
>decode_imap_utf7(encode_imap_utf7(z)) == z
true
/* Se RFC 2060 - no / ~ \ in folder names */
function ureplacer(pmatch) {
    var ret = ""
    pmatch = pmatch.replace(/\,/g,'/')
    var ix = pmatch.substr(1,pmatch.length-2)

    if (ix.length % 4 != 0) 
      ix = ix.padEnd(ix.length+ 4 - ix.length % 4,"=")
    try {
    var dx = atob(ix)
    for (var j = 0; j < dx.length; j = j+2) {
        ret = ret + String.fromCharCode((dx.charCodeAt(j) << 8) + dx.charCodeAt(j+1))
    }
    } catch(err) {
    console.log("Error in decoding foldername IMAP UTF7, sending empty string back")
    console.log(err)
    ret = ""
    }
    return ret
}

function breplacer(umatch) {
    var bst = ""
    for (var i=0; i < umatch.length; i++) {
      var f = umatch.charCodeAt(i)
      bst = bst + String.fromCharCode(f >> 8) + String.fromCharCode(f & 255)
    }

    try {
    bst = '&'+btoa(bst).replace(/\//g,',').replace(/=+/,'')+'-'
    }catch(err) {
    console.log("Error in encoding foldername IMAP UTF7, sending empty string back")
    console.log(err)
    bst = ""
    }
    return bst
}

function decode_imap_utf7(mstring) {
    var stm = new RegExp(/(\&[A-Za-z0-9\+\,]+\-)/,'g')
    return mstring.replace(stm,ureplacer).replace('&-','&')
}

function encode_imap_utf7(ustring) {
    ustring = ustring.replace(/\/|\~|\\/g,'')
    var vgm = new RegExp(/([^\x20-\x7e]+)/,'g')
    return ustring.replace('&','&-').replace(vgm,breplacer)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60793606

复制
相关文章

相似问题

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