Saya memiliki UTF-8 yang dikodekan NSData
dari server windows dan saya ingin mengubahnya menjadi NSString
untuk iPhone. Karena data berisi karakter (seperti simbol derajat) yang memiliki nilai berbeda di kedua platform, bagaimana cara mengonversi data menjadi string?
567
Jawaban:
Jika data tidak diakhiri null, Anda harus menggunakan
-initWithData:encoding:
Jika data diakhiri secara null, Anda sebaiknya menggunakan
-stringWithUTF8String:
untuk menghindari ekstra\0
di bagian akhir.(Perhatikan bahwa jika inputnya tidak benar-dikodekan UTF-8, Anda akan mendapatkan
nil
.)Varian cepat:
Jika data diakhiri dengan nol, Anda bisa menggunakan cara aman yang menghapus karakter nol itu, atau cara tidak aman mirip dengan versi Objective-C di atas.
sumber
Anda dapat memanggil metode ini
sumber
NSData
tahu berapa banyak byte yang dimilikinya ...NSData
keNSString
(lihat jawaban KennyTM), saya terkejut tidak ada+(id)stringWithUTF8Data:(NSData *)data
yang hanya berfungsi.Dengan rendah hati saya mengirimkan kategori untuk membuat ini tidak terlalu mengganggu:
dan
(Perhatikan bahwa jika Anda tidak menggunakan ARC, Anda memerlukannya
autorelease
.)Sekarang alih-alih kata kerja yang mengerikan:
Anda dapat melakukan:
sumber
Versi Swift dari String ke Data dan kembali ke String:
Xcode 10.1 • Swift 4.2.1
Tempat bermain
sumber
Terkadang, metode dalam jawaban lain tidak bekerja. Dalam kasus saya, saya membuat tanda tangan dengan kunci pribadi RSA saya dan hasilnya adalah NSData. Saya menemukan bahwa ini tampaknya berhasil:
Objektif-C
Cepat
sumber
[[NSData alloc] initWithBase64EncodedString:signatureString options:0]
; Swift :NSData(base64EncodedString: str options: nil)
Singkatnya, inilah jawaban yang lengkap, yang bekerja untuk saya.
Masalah saya adalah ketika saya menggunakannya
String yang saya dapat tidak dapat diprediksi: Sekitar 70% itu memang mengandung nilai yang diharapkan, tetapi terlalu sering hasilnya
Null
atau bahkan lebih buruk: rusak di akhir string.Setelah menggali saya beralih ke
Dan mendapat hasil yang diharapkan setiap saat.
sumber
Dengan Swift 5, Anda dapat menggunakan
String
'sinit(data:encoding:)
initializer untuk mengkonversiData
contoh menjadiString
contoh menggunakan UTF-8.init(data:encoding:)
memiliki deklarasi berikut:Kode Playground berikut menunjukkan cara menggunakannya:
sumber