V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
doubleflower
V2EX  ›  Node.js

一定是我哪里 SB 了,为什么 NodeJS 用这段代码转的 base64 和浏览器的 btoa 不同?

  •  
  •   doubleflower · 2017-03-07 13:42:34 +08:00 · 5306 次点击
    这是一个创建于 2820 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Node:

    > Buffer.from('~!@').toString('base64')
    'fiFA'
    

    Browser:

    > btoa('!@#')
    "IUAj"
    

    看不出有问题啊,黑人问号中...

    16 条回复    2017-03-07 20:25:23 +08:00
    Zzzzzzzzz
        1
    Zzzzzzzzz  
       2017-03-07 13:44:55 +08:00
    因为上下两个引号里的东西都不一样啊.....
    dzxx36gyy
        2
    dzxx36gyy  
       2017-03-07 13:46:36 +08:00 via Android
    ……
    Jaylee
        3
    Jaylee  
       2017-03-07 13:47:16 +08:00
    水逼
    zhidian
        4
    zhidian  
       2017-03-07 13:47:31 +08:00
    哎……你在钓鱼吗?输入就不一样。
    doubleflower
        5
    doubleflower  
    OP
       2017-03-07 13:48:22 +08:00
    尼马! 我就说我一定是哪里 SB 了,被这问题搞了半个小时。
    DlYgod
        6
    DlYgod  
       2017-03-07 14:22:34 +08:00
    哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
    doubleflower
        7
    doubleflower  
    OP
       2017-03-07 14:25:32 +08:00
    @Zzzzzzzzz
    @dzxx36gyy
    @Jaylee
    @zhidian

    唉,又过了 10 分钟,才发现代码里的一个 escape 写反错误,是我问错了地方。


    其实出问题的是这个小转码库:

    function fwescape(s) {
    return s == null ? s : reverse(b64encode(unescape(encodeURIComponent(s))))
    }

    function fwunescape(s) {
    return s == null ? s : decodeURIComponent(escape(b64decode(reverse(s))))
    }

    function reverse(s) {
    return s.split('').reverse().join('')
    }

    function b64encode(s) {
    return typeof btoa === 'undefined' ? Buffer.from(s).toString('base64') : btoa(s)
    }

    function b64decode(s) {
    return typeof atob === 'undefined' ? Buffer.from(s, 'base64').toString() : atob(s)
    }

    fwunescape(fwescape('abc 我是谁😸')) === 'abc 我是谁😸'


    主要搞的地方在于,这段代码分别能通过前端浏览器里和后端 NodeJS 里的单元测试!
    但是前后端互转英文没问题中文乱码,然后我怀疑是 base64 的问题单独提出来试了一下还不小心写错了测试字串。
    iminto
        8
    iminto  
       2017-03-07 16:21:17 +08:00
    兜售近视眼镜
    123s
        9
    123s  
       2017-03-07 16:39:38 +08:00
    我一眼就看到了,原来我被钓鱼了
    guokeke
        10
    guokeke  
       2017-03-07 16:41:04 +08:00 via Android
    ( ´Д`)y━・~~
    wyntergreg
        11
    wyntergreg  
       2017-03-07 17:10:34 +08:00
    两次输入按键盘按跑偏了,一次从·开始,一次从 1 开始
    50vip
        12
    50vip  
       2017-03-07 17:25:00 +08:00
    多年不笑的我,这次笑了~~~
    foru17
        13
    foru17  
       2017-03-07 17:26:36 +08:00
    笑了一个下午。
    hisway
        14
    hisway  
       2017-03-07 17:49:27 +08:00
    呵呵~
    cloudzqy
        15
    cloudzqy  
       2017-03-07 19:40:28 +08:00 via Android
    哈哈哈哈,我真笑了
    neurocomputing
        16
    neurocomputing  
       2017-03-07 20:25:23 +08:00
    哈哈哈哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2359 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:09 · PVG 00:09 · LAX 08:09 · JFK 11:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.