文書   >  Swift   >  String   >   decodeCString(_:as:repairingInvalidCodeUnits:)
汎用型メソッド
decodeCString(_:as:repairingInvalidCodeUnits:)
指定されたエンコーディングを使用して、与えられたポインタによって参照された、null で終了するデータをコピーすることによって新しい文字列を作成します。
宣言
パラメータ
cString | encoding でエンコードされた、null で終了するコードシーケンスへのポインタ。 |
encoding | cString によって参照されるデータの Unicode エンコーディング。 |
isRepairing | cString によって参照されるデータに誤った形式のシーケンスが含まれている場合であっても、true を渡して新しい文字列を作成します。誤った形式のシーケンスは、Unicode の置換文字 ("\u{FFFD}") に置き換えられます。誤った形式のシーケンスが検出された場合は、false を渡して新しい文字列の作成を中断します。 |
戻り値
新しい文字列と、修復が行われたかどうかを示すブール値とのタプル。isRepairing が false で誤った形式のシーケンスが検出された場合、このメソッドは nil を返します。
議論
isRepairing として true を渡すと、このメソッドは誤った形式のシーケンスを Unicode の置換文字 ("\u{FFFD}") で置き換えます。そうでなければ、誤った形式のシーケンスにより、このメソッドはデコードを中止し、nil を返します。
以下の例では、2 つの異なる CChar 配列の内容へのポインタを使用してこのメソッドを呼び出します。1 つ目は正しい形式の UTF-8 コード単位シーケンスを使用し、2 つ目は誤った形式のシーケンスを最後に使用します。
let validUTF8: [UInt8] = [67, 97, 102, 195, 169, 0] validUTF8.withUnsafeBufferPointer { ptr in let s = String.decodeCString(ptr.baseAddress, as: UTF8.self, repairingInvalidCodeUnits: true) print(s) } // Prints "Optional((Café, false))" let invalidUTF8: [UInt8] = [67, 97, 102, 195, 0] invalidUTF8.withUnsafeBufferPointer { ptr in let s = String.decodeCString(ptr.baseAddress, as: UTF8.self, repairingInvalidCodeUnits: true) print(s) } // Prints "Optional((Caf�, true))"
以下も見よ
C 文字列の変換
init?<S>(bytes: S, encoding: String.Encoding)
与えられたエンコーディングで解釈された、与えられたバイトのバッファから、与えられたバイト数を含む初期化された String オブジェクトを作成し、必要に応じてバッファを解放します。警告:このイニシャライザはメモリセーフではありません。
init(cString: UnsafePointer<CChar>)
与えられたポインタによって参照される null で終了する UTF-8 データをコピーすることによって新しい文字列を作成します。
init(cString: UnsafePointer<UInt8>)
与えられたポインタによって参照される null で終了する UTF-8 データをコピーすることによって新しい文字列を作成します。
init?(cString: UnsafePointer<CChar>, encoding: String.Encoding)
与えられた C 配列内のバイトを含む文字列を生成し、与えられたエンコーディングに従って解釈します。
init<Encoding>(decodingCString: UnsafePointer<Encoding.CodeUnit>, as: Encoding.Type)
与えられたポインタの位置にある null で終了するバイトのシーケンスから文字列を作成します。