Generic Type Method

decodeCString(_:as:repairingInvalidCodeUnits:)

Creates a new string by copying the null-terminated data referenced by the given pointer using the specified encoding. 新しい文字列を、与えられたポインタによって参照されるヌル終端のデータをコピーすることによって作成します、指定された符号化を使います。

Declaration 宣言

static func decodeCString<Encoding>(_ cString: UnsafePointer<Encoding.CodeUnit>?, as encoding: Encoding.Type, repairingInvalidCodeUnits isRepairing: Bool = true) -> (result: String, repairsMade: Bool)? where Encoding : _UnicodeEncoding

Parameters パラメータ

cString

A pointer to a null-terminated code sequence encoded in encoding. encodingでエンコードされたヌル終端のコードシーケンスへのポインタ。

encoding

The Unicode encoding of the data referenced by cString. cStringによって参照されるデータのユニコードエンコーディング。

isRepairing

Pass true to create a new string, even when the data referenced by cString contains ill-formed sequences. Ill-formed sequences are replaced with the Unicode replacement character ("\u{FFFD}"). Pass false to interrupt the creation of the new string if an ill-formed sequence is detected. trueを渡すと、cStringによって参照されるデータが誤形式シーケンスを含む時であっても新しい文字列を作成します。誤形式シーケンスは、ユニコード代替文字("\u{FFFD}")で置き換えられます。falseを渡すと新しい文字列の作成は、誤形式シーケンスが検出されるならば中断します。

Return Value 戻り値

A tuple with the new string and a Boolean value that indicates whether any repairs were made. If isRepairing is false and an ill-formed sequence is detected, this method returns nil. 新しい文字列と、あらゆる修復がなされたかどうかを指し示すブール値を持つタプル。isRepairingfalseで誤形式シーケンスが検出されるならば、このメソッドはnilを返します。

Discussion 解説

When you pass true as isRepairing, this method replaces ill-formed sequences with the Unicode replacement character ("\u{FFFD}"); otherwise, an ill-formed sequence causes this method to stop decoding and return nil. あなたがtrueisRepairingとして渡すとき、このメソッドは誤形式シーケンスをユニコード代替文字("\u{FFFD}")で置き換えます;そうでなければ、ある誤形式シーケンスはこのメソッドがエンコードを停止してnilを返すことを引き起こします。

The following example calls this method with pointers to the contents of two different CChar arrays—the first with well-formed UTF-8 code unit sequences and the second with an ill-formed sequence at the end. 以下の例は、このメソッドを2つの異なるCChar配列の内容へのポインタとともに呼び出します—最初のものは正しい形式の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((result: "Café", repairsMade: 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((result: "Caf�", repairsMade: true))"

See Also 参照

Converting a C String C文字列を変換する