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