当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。