javascript - 我如何在 Javascript 中对数据(不是字符串)进行 base64 编码?

标签 javascript iphone encoding base64

我正在将功能从 Objective-C iPhone 应用程序移植到 Javascript iPhone 应用程序 (Appcelerator Titanium)。在 Objective-C 中,我有一个代表这个标记的 NSData 对象:

//NSData object printed to the console:
<0cd9f571 b0e66e6d ca410d12 f67a404a 7e64b9b5 d2483fd9 63a9267b 1c7609e2>

它不是一个字符串,它是一个 NSData 对象——一个字节缓冲区的面向对象的包装器。当我对对象进行 base64 编码时,我得到了这个结果:

//base64 encoded NSData object
DNn1cbDmbm3KQQ0S9npASn5kubXSSD/ZY6kmexx2CeI=

在我的 javascript 实现中,我有相同标记的字符串表示形式。它看起来像这样:

//string version of the token in my javascript implementation
0cd9f571b0e66e6dca410d12f67a404a7e64b9b5d2483fd963a9267b1c7609e2

当我在 javascript 中对字符串对象进行 base64 编码时,我得到了这个结果:

//base64 encoded token (string) in javascript
MGNkOWY1NzFiMGU2NmU2ZGNhNDEwZDEyZjY3YTQwNGE3ZTY0YjliNWQyNDgzZmQ5NjNhOTI2N2IxYzc2MDllMg==

问题是,我要发布到的 Web 服务不需要 base64 编码的字符串,它需要 base64 编码的数据!我如何在 javascript 中执行此操作?

最佳答案

在 base64 编码之前转换十六进制字符串应该可以解决问题。在 JS 中执行此操作:

if (! Array.prototype.map) {
    Array.prototype.map = function(f) {
        var result = [];
        for (var i=0; i < this.length; ++i) {
            result[i] = f(this[i], i);
        }
        return result;
    }
}
String.prototype.b16decode = function() {
    return this.match(/../g).map(
        function (x) {
            return String.fromCharCode(parseInt(x, 16));
        }
    ).join('');
}

比如运行

btoa('0cd9f571b0e66e6dca410d12f67a404a7e64b9b5d2483fd963a9267b1c7609e2'.b16decode())

(其中 btoa 是一些浏览器提供的 base64 编码函数)导致

"DNn1cbDmbm3KQQ0S9npASn5kubXSSD/ZY6kmexx2CeI="

关于javascript - 我如何在 Javascript 中对数据(不是字符串)进行 base64 编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6618962/

相关文章:

javascript - 未捕获的类型错误未定义不是 .empty() 上的函数

javascript - 如何在加载下一个之前等待一个javascript加载

iphone - iPhone 中的 Twitter 集成无需登录即可阅读公共(public)推文/HashTags?

C++ 字符串 : UTF-8 or 16-bit encoding?

sql - 将 Postgresql 数据库从包含混合编码类型的 SQL_ASCII 转换为 UTF-8

javascript - 当脚本加载为 "preload"/"modulepreload"时会发生什么?

javascript - jqplot : how to display value from an array in a highlighter

iphone - 如何在 iphone 中将字节数组转换为 base64 字符串?

ios - 长按后如何跟踪按钮选择?

c - GIF LZW 压缩流中的编码错误