如何在Swift中将字符串转换为Unicode(UTF-8)字符串?

19

如何在Swift中将字符串转换为Unicode(UTF-8)字符串?

在Objective-C中,我可以这样写:

NSString *str = [[NSString alloc] initWithUTF8String:[strToDecode cStringUsingEncoding:NSUTF8StringEncoding]];

如何在Swift中做类似的事情?


也许你可以在接收到数据时更改解码方式?像这个链接中的例子:https://dev59.com/PY3da4cB1Zd3GeqP2Jc2,这类似吗? - Eric Aya
谢谢,但这不适合我。简单来说,我需要将这个转换:let string = "ÐÐ ° ÑпР° Ñи пÑогÑÐ ° ли ÑÑÑÐ ± оÐ" 转换为 let result = "Карпати програли футбол"。我使用在线转换器将其转换为Unicode(UTF-8)。 - Dirder
3个回答

16

Swift 4和5我创建了一个String扩展

extension String {
    func utf8DecodedString()-> String {
        let data = self.data(using: .utf8)
        let message = String(data: data!, encoding: .nonLossyASCII) ?? ""
        return message
    }
    
    func utf8EncodedString()-> String {
        let messageData = self.data(using: .nonLossyASCII)
        let text = String(data: messageData!, encoding: .utf8) ?? ""
        return text
    }
}

1
你的第二个函数缺少一个 'c'(你写成了 fun utf8EncodedString())。 - Josh O'Connor
1
@JoshO'Connor 谢谢!! - Gurjinder Singh

14

Swift 4:

let str = String(describing: strToDecode.cString(using: String.Encoding.utf8))

11

使用这段代码:

let str = String(UTF8String: strToDecode.cStringUsingEncoding(NSUTF8StringEncoding))

希望这有帮助。


谢谢,但这种方式并不能解决我的问题。我之前喜欢的东西显示出了不正确的非拉丁符号 :-( - Dirder
我有一个字符串,像这样:" @ Rock-ЦиÑаÑа: Deep Purple ",其中包含Unicode符号(如西里尔字母等)。 当我使用在线转换器将其转换为Unicode(UTF-8)时,可以将其转换为这个:"@ Rock-Цитата: Deep Purple"。问题是:如何在Swift中实现这一点? - Dirder
简单来说,我需要将这个字符串进行转换:let string = "ÐаÑпаÑи пÑогÑали ÑÑÑбоÐ" 转换为 let result = "Карпати програли футбол"。我使用在线转换器将其转换为Unicode(UTF-8)。 - Dirder
请在此提及在线转换器是什么,并从哪种格式转换为UTF-8,请同时提及这两种格式。 - Tyson Vignesh
7
这段代码的含义是将字符串 qString 转换成使用 UTF-8 编码的 C 字符串。 - Manish Nahar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接