如何在Swift 3中解码Unicode字符?

7

我正在开发一款聊天应用程序,除此之外,一切都正常。该应用程序在Android和iOS平台上均可使用。我们想在聊天中传递表情符号。在Android中,我们使用UTF编码和StringEscapeUtils。在Android中,它可以完美地工作。当我们传递表情符号enter image description here时,它会被编码并存储在数据库中,例如"\u263A"。

现在在Android中,该字符串也会被解码并显示为完美视图,但是我们无论如何都无法在iOS中解码相同的字符串。我们已经尝试使用UTF字符串进行解码。但仍然不起作用。

我已经遵循了这个链接Print unicode character from variable (swift)

提前致谢。


你想要在标签(Label)上打印还是文本框(textfield)上打印? - Sagar Snehi
@SagarSnehi 我想在两个上都设置。但如果针对文本字段有解决方案,那也会对我有很大帮助。 - Crazy Developer
1
@CrazyDeveloper 或许这可以帮到你?https://dev59.com/OIDba4cB1Zd3GeqPI86Q - Nimble
1
如果您的Unicode像这样"\u{263A}",那么此代码将适用于标签labelName.text = "\u{20B9}"。如果没有这些大括号,它将无法作为字符串处理。 - Sagar Snehi
2个回答

7
最简单的方法是使用CFStringTransform,如下所示。
let wI = NSMutableString( string: "\\u263a" )
CFStringTransform( wI, nil, "Any-Hex/Java" as NSString, true )
someUILabel.text = wI as String

非常感谢。你的代码对我很有用。 - Crazy Developer
绝妙的解决方案 :) - sinner
没有帮助:https://stackoverflow.com/questions/45586825/swift-3-replace-or-format-unicode-characters-multiply-from-long-text - Nikola Lukic

5
你应该尝试这个:
例如:
let charString = "263A"
    if let charCode = UInt32(charString, radix: 16),let unicode = UnicodeScalar(charCode)
    {
        let str = String(unicode)
        print(str)
    }
    else
    {
        print("invalid input")
    }

如果您想在标签/文本字段上打印内容,则需执行以下步骤:
let charString = "263A"
if let charCode = UInt32(charString, radix: 16),let unicode = UnicodeScalar(charCode)
{
    let str = String(unicode)
    CharLabel.text = str             //Print on Label
    CharTextField.text = str         //Print on TextField
}
else
{
    print("invalid input")
}

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