1. ホーム
  2. ios

[解決済み] UTF-8でエンコードされたNSDataをNSStringに変換します。

2022-02-09 13:32:31

質問

UTF-8でエンコードした NSData に変換したい。 NSString iPhone用です。データには、両プラットフォームで値が異なる文字(度記号など)が含まれているため。 データを文字列に変換するには?

どのように解決するのですか?

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

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

データがヌル文字で終端している場合は、代わりに -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`.

もしデータがヌル文字で終端しているなら、ヌル文字を削除する安全な方法と、上記の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:))