আমি সুইফটে বেস 64 এ স্ট্রিংটি কীভাবে এনকোড করব?


115

আমি একটি স্ট্রিং বেস 64 এ রূপান্তর করতে চাই। আমি বেশ কয়েকটি জায়গায় উত্তর পেয়েছি, তবে এটি সুইফটে আর কাজ করে না। আমি এক্সকোড 6.2 ব্যবহার করছি। আমি বিশ্বাস করি উত্তরটি পূর্বের এক্সকোড সংস্করণে কাজ হতে পারে এবং এক্সকোড 6.2 নয়।

এক্সকোড .2.২ এ দয়া করে কেউ আমাকে গাইড করতে দয়া করে?

আমি যে উত্তরটি পেয়েছি তা এটি ছিল তবে এটি আমার এক্সকোড সংস্করণে কাজ করে না:

var str = "iOS Developer Tips encoded in Base64"
println("Original: \(str)")

// UTF 8 str from original
// NSData! type returned (optional)
let utf8str = str.dataUsingEncoding(NSUTF8StringEncoding)

// Base64 encode UTF 8 string
// fromRaw(0) is equivalent to objc 'base64EncodedStringWithOptions:0'
// Notice the unwrapping given the NSData! optional
// NSString! returned (optional)
let base64Encoded = utf8str.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.fromRaw(0)!)
println("Encoded:  \(base64Encoded)")

// Base64 Decode (go back the other way)
// Notice the unwrapping given the NSString! optional
// NSData returned
let data = NSData(base64EncodedString: base64Encoded, options:   NSDataBase64DecodingOptions.fromRaw(0)!)

// Convert back to a string
let base64Decoded = NSString(data: data, encoding: NSUTF8StringEncoding)
println("Decoded:  \(base64Decoded)")

রেফ: HTTP- র


সুইফট এক্সটেনশনটি পরিষ্কার এবং কার্যকর। stackoverflow.com/a/46969102/1996294
অশোক

উত্তর:


69

আমার 6.2 ইনস্টল করা নেই তবে আমি মনে করি না 6.3 এই ক্ষেত্রে কোনও আলাদা:

dataUsingEncoding একটি returnsচ্ছিক প্রত্যাবর্তন করে, যাতে আপনার এটি মোড়ানো দরকার।

NSDataBase64EncodingOptions.fromRawসঙ্গে প্রতিস্থাপন করা হয়েছে NSDataBase64EncodingOptions(rawValue:)। কিছুটা অবাক করে বলা যায়, এটি কোনও অনুপযুক্ত আরম্ভকারী নয় তাই আপনার এটি মোড়ানোর দরকার নেই।

কিন্তু যেহেতু NSData(base64EncodedString:) হয় একটি failable সূচনাকারী, আপনি যে মোড়ক খোলা হবে।

বিটিডব্লিউ, এই সমস্ত পরিবর্তনগুলি এক্সকোড মাইগ্রেটার দ্বারা প্রস্তাবিত হয়েছিল (নালীতে ত্রুটি বার্তাটি ক্লিক করুন এবং এটিতে একটি "এটি ঠিক করুন" পরামর্শ)।

চূড়ান্ত কোড, জোর-মোড়ক এড়াতে পুনরায় লিখিত, এর মতো দেখাচ্ছে:

import Foundation

let str = "iOS Developer Tips encoded in Base64"
println("Original: \(str)")

let utf8str = str.dataUsingEncoding(NSUTF8StringEncoding)

if let base64Encoded = utf8str?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0)) 
{

    println("Encoded:  \(base64Encoded)")

    if let base64Decoded = NSData(base64EncodedString: base64Encoded, options:   NSDataBase64DecodingOptions(rawValue: 0))
                          .map({ NSString(data: $0, encoding: NSUTF8StringEncoding) })
    {
        // Convert back to a string
        println("Decoded:  \(base64Decoded)")
    }
}

(যদি সুইফট 1.2 ব্যবহার করে আপনি মানচিত্রের পরিবর্তে একাধিক ব্যবহার করতে পারেন)

সুইফট 5 আপডেট:

import Foundation

let str = "iOS Developer Tips encoded in Base64"
print("Original: \(str)")

let utf8str = str.data(using: .utf8)

if let base64Encoded = utf8str?.base64EncodedString(options: Data.Base64EncodingOptions(rawValue: 0)) {
    print("Encoded: \(base64Encoded)")

    if let base64Decoded = Data(base64Encoded: base64Encoded, options: Data.Base64DecodingOptions(rawValue: 0))
    .map({ String(data: $0, encoding: .utf8) }) {
        // Convert back to a string
        print("Decoded: \(base64Decoded ?? "")")
    }
}

3
আপনি কি []পরিবর্তে না করতে পারেন NSDataBase64EncodingOptions(rawValue: 0)?
গন্ধক পাথর

198

দ্রুতগতি

import Foundation

extension String {

    func fromBase64() -> String? {
        guard let data = Data(base64Encoded: self) else {
            return nil
        }

        return String(data: data, encoding: .utf8)
    }

    func toBase64() -> String {
        return Data(self.utf8).base64EncodedString()
    }

}

এটি সুরক্ষিত কোডে রয়েছে, আপনাকে বিকল্পগুলি পরিচালনা করতে হবে।
মোহাম্মদ যায়েদ পাঠান

সুইফট 3 সিনট্যাক্স যুক্ত হয়েছে
ম্যাথু নিপ্পেন

3
আমি এই বেসটি 64 স্ট্রিংকে রূপান্তর করার চেষ্টা করেছি: dfYcSGpvBqyzvkAXkdbHDA==এবং প্রত্যাশিত আউটপুটটি ছিল: u�Hjo���@���তবে উপরের ফাংশনটি শূন্য করে। আপনি উপরের বেস--৪ স্ট্রিংয়ের আউটপুট এই সাইটগুলিতে দেখতে পারেন: সাইট 1 , সাইট 2
চঞ্চল রাজ

@ জায়েদপাথান, স্থির!
ডার্কংস

22

আপনি কেবল একটি সাধারণ এক্সটেনশন যেমন করতে পারেন:

import UIKit

// MARK: - Mixed string utils and helpers
extension String {


    /**
    Encode a String to Base64

    :returns: 
    */
    func toBase64()->String{

        let data = self.dataUsingEncoding(NSUTF8StringEncoding)

        return data!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))

    }

}

আইওএস 7 এবং তার বেশি


20

সুইফট 4.0.3

import UIKit

extension String {

func fromBase64() -> String? {
    guard let data = Data(base64Encoded: self, options: Data.Base64DecodingOptions(rawValue: 0)) else {
        return nil
    }

    return String(data: data as Data, encoding: String.Encoding.utf8)
}

func toBase64() -> String? {
    guard let data = self.data(using: String.Encoding.utf8) else {
        return nil
    }

    return data.base64EncodedString(options: Data.Base64EncodingOptions(rawValue: 0))
    }
}

আমি একই কোডটি ব্যবহার করছি তবে তবুও, সংযোজক ত্রুটি দেয়: টাইপের মান 'ডেটা'র কোনও সদস্য নেই' বেস6464 এনকোডড স্ট্রিংউইথঅপশনস 'সুইফট
৩.৩.৩

5
সঙ্গে Data(self.utf8).base64EncodedString()কোন ঐচ্ছিক toBase64 প্রয়োজন হত ()। নীচের উত্তর থেকে: স্ট্যাকওভারফ্লো.com
জনি


13

পুঙ্খানুপুঙ্খ গবেষণার পরে আমি সমাধানটি পেয়েছি

এনকোডিং

    let plainData = (plainString as NSString).dataUsingEncoding(NSUTF8StringEncoding)
    let base64String =plainData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.fromRaw(0)!)
    println(base64String) // bXkgcGxhbmkgdGV4dA==

গঠনের কথা মাথায় রেখে

    let decodedData = NSData(base64EncodedString: base64String, options:NSDataBase64DecodingOptions.fromRaw(0)!)
    let decodedString = NSString(data: decodedData, encoding: NSUTF8StringEncoding)    
    println(decodedString) // my plain data

এই http://creativecoe कुशल.net/swift/encoding-and-decoding-base64/ এ আরও


12

এক্সকোড 8.3.2 • সুইফট 3.1

extension String {
    var data:          Data  { return Data(utf8) }
    var base64Encoded: Data  { return data.base64EncodedData() }
    var base64Decoded: Data? { return Data(base64Encoded: self) }
}

extension Data {
    var string: String? { return String(data: self, encoding: .utf8) }
}

let original = "iOS Developer Tips encoded in Base64"

let utf8Data = original.data                             // 36 bytes
let base64EncodedString = utf8Data.base64EncodedString() //  aU9TIERldmVsb3BlciBUaXBzIGVuY29kZWQgaW4gQmFzZTY0\n"
let base64EncodedData = utf8Data.base64EncodedData()     //  48 bytes"

print("base64EncodedData:", original.base64Encoded)      //  48 bytes
print("base64EncodedString:", original.base64Encoded.string ?? "") // "aU9TIERldmVsb3BlciBUaXBzIGVuY29kZWQgaW4gQmFzZTY0"
print("base64DecodedData:", original.base64Encoded.string?.base64Decoded  ?? "") // 36 bytes
print("base64DecodedString:", original.base64Encoded.string?.base64Decoded?.string ?? "") // iOS Developer Tips encoded in Base64

11

সুইফট 3 বা 4

let base64Encoded = Data("original string".utf8).base64EncodedString()

1
পৃষ্ঠায় সেরা উত্তর কারণ এটি আপডেট হয়েছে, একটি অ-alচ্ছিক প্রদান করে এবং কোনও এক্সটেনশনে এ জাতীয় সরল ক্রিয়াকলাপটি लपेटায় না।
জানো

8

সুইফ্ট 5.1 , এক্সকোড 11 :

public extension String {

    /// Assuming the current string is base64 encoded, this property returns a String
    /// initialized by converting the current string into Unicode characters, encoded to
    /// utf8. If the current string is not base64 encoded, nil is returned instead.
    var base64Decoded: String? {
        guard let base64 = Data(base64Encoded: self) else { return nil }
        let utf8 = String(data: base64, encoding: .utf8)
        return utf8
    }

    /// Returns a base64 representation of the current string, or nil if the
    /// operation fails.
    var base64Encoded: String? {
        let utf8 = self.data(using: .utf8)
        let base64 = utf8?.base64EncodedString()
        return base64
    }

}

এটি দুর্দান্ত কাজ করে, সত্যিকারের সংযোগ কোড এবং প্রচুর সাহায্য করে helped
রাদেবাস

7

সুইফট 3/4 / 5.1

এখানে একটি সাধারণ Stringএক্সটেনশান, ডিকোডিংয়ের সময় কোনও ত্রুটি হলে বিকল্পগুলি সংরক্ষণের জন্য মঞ্জুরি দেয়।

extension String {
    /// Encode a String to Base64
    func toBase64() -> String {
        return Data(self.utf8).base64EncodedString()
    }

    /// Decode a String from Base64. Returns nil if unsuccessful.
    func fromBase64() -> String? {
        guard let data = Data(base64Encoded: self) else { return nil }
        return String(data: data, encoding: .utf8)
    }
}

উদাহরণ:

let testString = "A test string."

let encoded = testString.toBase64() // "QSB0ZXN0IHN0cmluZy4="

guard let decoded = encoded.fromBase64() // "A test string."
    else { return } 

2

সব সংগ্রামের পরেও আমি এটিকে পছন্দ করেছিলাম।

func conversion(str:NSString)
{

    if let decodedData = NSData(base64EncodedString: str as String, options:NSDataBase64DecodingOptions(rawValue: 0)),
        let decodedString = NSString(data: decodedData, encoding: NSUTF8StringEncoding) {

        print(decodedString)//Here we are getting decoded string

ডিকোডড স্ট্রিংকে অভিধানে রূপান্তর করার জন্য আমি অন্য একটি ফাংশন কল করার পরে

        self .convertStringToDictionary(decodedString as String)
    }


}//function close

অভিধানে স্ট্রিংয়ের জন্য //

func convertStringToDictionary(text: String) -> [String:AnyObject]? {
    if let data = text.dataUsingEncoding(NSUTF8StringEncoding) {
        do {
            let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String:AnyObject]

            print(json)
            if let stack = json!["cid"]  //getting key value here
            {
                customerID = stack as! String
                print(customerID)
            }

        } catch let error as NSError {
            print(error)
        }
    }
    return nil
}

2

SWIFT 3.0 এর জন্য

let str = "iOS Developer Tips encoded in Base64"
print("Original: \(str)")

let utf8str = str.data(using: String.Encoding.utf8)

if let base64Encoded = utf8str?.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
{

  print("Encoded:  \(base64Encoded)")

  if let base64Decoded = NSData(base64Encoded: base64Encoded, options:   NSData.Base64DecodingOptions(rawValue: 0))
    .map({ NSString(data: $0 as Data, encoding: String.Encoding.utf8.rawValue) })
  {
    // Convert back to a string
    print("Decoded:  \(base64Decoded)!")
  }
}

এটি সর্বদা আমাকে শূন্য করে। আপনি দয়া করে সাহায্য করতে পারেন।
পবন

1

সুইফট 4.2

var base64String = "my fancy string".data(using: .utf8, allowLossyConversion: false)?.base64EncodedString()

ডিকোড করতে, দেখুন ( https://gist.github.com/stinger/a8a0381a57b4ac530dd029458273f31a থেকে )

//: # Swift 3: Base64 encoding and decoding
import Foundation

extension String {
//: ### Base64 encoding a string
    func base64Encoded() -> String? {
        if let data = self.data(using: .utf8) {
            return data.base64EncodedString()
        }
        return nil
    }

//: ### Base64 decoding a string
    func base64Decoded() -> String? {
        if let data = Data(base64Encoded: self) {
            return String(data: data, encoding: .utf8)
        }
        return nil
    }
}
var str = "Hello, playground"
print("Original string: \"\(str)\"")

if let base64Str = str.base64Encoded() {
    print("Base64 encoded string: \"\(base64Str)\"")
    if let trs = base64Str.base64Decoded() {
        print("Base64 decoded string: \"\(trs)\"")
        print("Check if base64 decoded string equals the original string: \(str == trs)")
    }
}

0

SwiftyBase64 (সম্পূর্ণ প্রকাশ: আমি এটি লিখেছি) একটি নেটিভ সুইফট বেস 64 এনকোডিং (কোনও ডিকোডিং লাইব্রেরি নেই it এটির সাহায্যে আপনি স্ট্যান্ডার্ড বেস 64 কে এনকোড করতে পারেন:

let bytesToEncode : [UInt8] = [1,2,3]
let base64EncodedString = SwiftyBase64.EncodeString(bytesToEncode)

অথবা URL এবং ফাইল নাম নিরাপদ বেস 64:

let bytesToEncode : [UInt8] = [1,2,3]
let base64EncodedString = SwiftyBase64.EncodeString(bytesToEncode, alphabet:.URLAndFilenameSafe)

0

সুইফট ২.০-এ @ আয়ারস্পিডের বেগের উত্তর:

let str = "iOS Developer Tips encoded in Base64"
print("Original: \(str)")
let base64Encoded = str.dataUsingEncoding(NSUTF8StringEncoding)!.base64EncodedStringWithOptions([])
print("Encoded: \(base64Encoded)")
let base64DecodedData = NSData(base64EncodedString: base64Encoded, options: [])!
var base64DecodedString = String(data: base64DecodedData, encoding: NSUTF8StringEncoding)!
print("Decoded: \(base64DecodedString)")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.