Swift 实现生成七牛 token 中 base64 编码与在线实例不一致

2015-11-24 12:28:35 +08:00
 Dean

准备用 swfit 写一个七牛生成 token 的算法,发现将 Dictionay 转成 JSON 再生成 URL 安全的 Base64 编码与在线实例不一致

func JSONStringify(value: AnyObject,prettyPrinted:Bool = false) -> String{

        let options = prettyPrinted ? NSJSONWritingOptions.PrettyPrinted : NSJSONWritingOptions(rawValue: 0)


        if NSJSONSerialization.isValidJSONObject(value) {

            do{
                let data = try NSJSONSerialization.dataWithJSONObject(value, options: options)
                if let string = NSString(data: data, encoding: NSUTF8StringEncoding) {
                    return string as String
                }
            }catch {

                print("error")
                //Access error here
            }

        }
        return ""

    }


        let jsonObject: [String : AnyObject] = ["deadline":1448340828,"scope":"Blog",]

        let jsonString = JSONStringify(jsonObject)

        let Data = jsonString.dataUsingEncoding(NSUTF8StringEncoding)

        let encoded = Data?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)


        let demoStr = "{\"scope\":\"Blog\",\"deadline\":1448340828}"

        let demoData = demoStr.dataUsingEncoding(NSUTF8StringEncoding)

        let demoEncoded = demoData?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)

        print(encoded)

        print(demoEncoded)

手动构建字面量 String 的 demoEncoded 与在线实例是一致的,构建 Dictionary 转化的 encode 与实例不一致,一直没弄明白症结😂

4696 次点击
所在节点    Swift
7 条回复
sujin190
2015-11-24 13:01:33 +08:00
key 的顺序不一样吧, jsonString demoStr 是一样的?
Dean
2015-11-24 13:32:05 +08:00
@sujin190 应该跟 key 的顺序无关,修改过顺序也一样 , jsonString 和 demoString 比对过不一样,但是不明白为什么 dictionary 转会后会不一致
Dean
2015-11-24 14:41:15 +08:00
纠正一行代码 let jsonObject: [String : AnyObject] = ["scope":"Blog","deadline":1448340828]
sujin190
2015-11-24 15:11:30 +08:00
@Dean 这个 dictionary 实现来说,它的 key 的顺序和书写顺序是无关的,把 jsonString 和 demoString 输出来看看呗
Dean
2015-11-24 17:40:02 +08:00
sujin190
2015-11-24 18:23:38 +08:00
@Dean 这不是 key 的顺序不一样么。。
Dean
2015-11-24 23:51:46 +08:00
@Dean 好吧,确实是顺序不一致,是什么原因导致生成 String 后 key 顺序不一致不清楚。应该与 Dictionay 添加前后没有关系, key 存储是以 hash 值存储的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/238479

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX