UTF-8 でエンコードされた NSData を NSString に変換する 質問する

UTF-8 でエンコードされた NSData を NSString に変換する 質問する

Windows サーバーからUTF-8 でエンコードされたNSDataデータをNSStringiPhone 用に変換したいと考えています。データには両方のプラットフォームで値が異なる文字 (度記号など) が含まれているため、データを文字列に変換するにはどうすればよいでしょうか。

ベストアンサー1

データがヌル終端されていない場合は、-initWithData:encoding:

NSString* newStr = [[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding];

データが null で終了している場合は、末尾の-stringWithUTF8String:余分な部分を回避するために代わりに を使用する必要があります。\0

NSString* newStr = [NSString stringWithUTF8String:[theData bytes]];

(入力が適切に UTF-8 でエンコードされていない場合は、 が返されることに注意してくださいnil。)


Swift バリアント:

let newStr = String(data: data, encoding: .utf8)
// note that `newStr` is a `String?`, not a `String`.

データが null で終了している場合は、その null 文字を削除する安全な方法、または上記の Objective-C バージョンに似た安全でない方法のいずれかを実行できます。

// safe way, provided data is \0-terminated
let newStr1 = String(data: data.subdata(in: 0 ..< data.count - 1), encoding: .utf8)
// unsafe way, provided data is \0-terminated
let newStr2 = data.withUnsafeBytes(String.init(utf8String:))

おすすめ記事