我正在 Swift 中构建一个应用程序,并使用 Backendless 作为我的后端。结果他们的数据库是UTF8,因此如果不先转换字符串我就无法保存表情符号。 我似乎找不到正确的方法来将其转换为 UTF8。我试过这个:
let encoding = processedText.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)
但经过此操作后,表情符号看起来像这样: %F0%9F%99%84%F0%9F%98%80%F0%9F%98%92%F0%9F%98%89%F0%9F%98%B6%F0%9F%98%B6%F0 %9F%98%80%F0%9F%99%81
我尝试过这个: 类 func stringToUTF8String (string: String) -> String? {
let encodedData = string.dataUsingEncoding(NSUTF8StringEncoding)!
let attributedOptions = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType]
do{
let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil)
return attributedString.string
}catch _ {
}
return nil
}
表情符号如下所示: 🤔🤔👅ðŸ™ðŸ~‚ðŸ~ðŸ~ŽðŸ~‰ðŸ~…ðŸ~‰
有人有什么建议吗?谢谢
最佳答案
首先,使用您使用的 utf8 编码从 NSData
创建一个 String
String(data: theData, encoding: NSUTF8StringEncoding)
其次,swift String 已经符合 unicode 标准。您不必转换它们,因为它们已经这样做了。您可以访问不同的编码及其各自的属性,例如String.utf8
、String.utf16
等等。
第三,要让 NSAttributedString 正确地对数据中的字符串进行 utf8 编码,您必须将 NSCharacterEncodingDocumentAttribute
键添加到 attributedOptions
字典,其值为 NSUTF8StringEncoding
.
最后的注释,我不知道这是否是一个部分方法,但属性字符串不应该仅仅用于编码字符串。
这是 NSAttributedString 以某种格式编码数据,返回乱码。
这里 NSAttributedString 将数据编码为 utf8 并返回正确的文本。
我知道这是一张图像,但我想显示结果。如果这些不起作用,数据库可能会剥离位。这很糟糕,也不知道接下来该怎么做,如果你想要 unicode 支持,你可能不应该使用该数据库。
关于Swift 将 UTF16 转换为 UTF8 并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35713551/