當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Swift String decodeCString(_:as:repairingInvalidCodeUnits:)用法及代碼示例


類型方法

decodeCString(_:as:repairingInvalidCodeUnits:)

通過使用指定的編碼複製給定指針引用的以 null 結尾的數據來創建一個新字符串。

聲明

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

返回值

帶有新字符串和布爾值的元組,指示是否進行了任何修複。如果 isRepairingfalse 並且檢測到 ill-formed 序列,則此方法返回 nil

參數

cString

指向在 encoding 中編碼的空終止代碼序列的指針。

encoding

cString 引用的數據的 Unicode 編碼。

isRepairing

傳遞 true 以創建新字符串,即使 cString 引用的數據包含 ill-formed 序列。 Ill-formed 序列被替換為 Unicode 替換字符 ("\u{FFFD}")。如果檢測到 ill-formed 序列,則傳遞 false 以中斷新字符串的創建。

詳述

當您將 true 作為 isRepairing 傳遞時,此方法將 ill-formed 序列替換為 Unicode 替換字符 ("\u{FFFD}");否則,ill-formed 序列會導致此方法停止解碼並返回 nil

下麵的示例使用指向兩個不同 CChar 數組內容的指針調用此方法——第一個具有格式良好的 UTF-8 代碼單元序列,第二個在末尾具有 ill-formed 序列。


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))"

可用版本

iOS 8.0+, iPadOS 8.0+, macOS 10.10+, Mac Catalyst 13.0+, tvOS 9.0+, watchOS 2.0+

相關用法


注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 String decodeCString(_:as:repairingInvalidCodeUnits:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。