当您使用这样的方法保存 NSString(或 Swift.String)时,它会写入 xattr“com.apple.TextEncoding”。当您使用相应的方法之一重新加载它时,它会检查此 xattr 并将其用作默认编码。
是否有任何 API 可以根据此 xattr 确定文件的编码,而无需加载文件的内容?
我知道解析“IANA 名称,分号,CFStringEncoding uint32,(可选的其他东西)”并不难,但如果有内置方法,我宁愿避免它。
如果我正确理解了您的问题,那么您是在寻求一种读取“com.apple.TextEncoding”扩展文件属性值的方法。这可以通过在<sys/xattr.h>
.
这是一篇URL
扩展属性功能的帖子:
编写扩展文件属性快速示例
示例用法:
func getTextEncodingAttribute(for url: URL) -> String? {
do {
let data = try url.extendedAttribute(forName: "com.apple.TextEncoding")
return String(data: data, encoding: .utf8)
} catch _ {
}
return nil
}