首页 > 解决方案 > 在 Swift 中构建 Unicode 标量字符串

问题描述

如何使用编码制作“\u{3A9}”字符串?这是我尝试过的,但没有奏效!

let omegaHexadecimal: String = "3A9"
let omega = "\u{" + omegaHexadecimal + "}"

或者:

let omegaHexadecimal: String = "3A9"
let omega = "\u{\(omegaHexadecimal)}"

更新:

extension StringProtocol where Self: RangeReplaceableCollection {

    private var decodingUnicodeCharacters: String { applyingTransform(.init("Hex-Any"), reverse: false) ?? "" }

    func stringToUniCodeHexConvertor(upTo lenght: Int = 4, using character: Character = "0") -> String {
        
        return ("\\u" + repeatElement(character, count: Swift.max(0,lenght-count)) + self).decodingUnicodeCharacters
    }

}

let omegaHexadecimal: String = "3A9"
let omega = omegaHexadecimal.stringToUniCodeHexConvertor()
print(omega)   // "Ω"

标签: swift

解决方案


您可以将字符串最多填充 4 个十六进制数字(2 个字节 UInt16),添加\u前缀\uXXXX并使用字符串转换将您的 unicode 十六进制值转换为相应的字符:

extension StringProtocol where Self: RangeReplaceableCollection {
    func paddingToLeft(upTo lenght: Int = 4, using character: Character = "0") -> Self {
        repeatElement(character, count: Swift.max(0,lenght-count)) + self
    }
    var decodingUnicodeCharacters: String { applyingTransform(.init("Hex-Any"), reverse: false) ?? "" }
}

let omegaHexadecimal: String = "3A9"
let omega = "\\u" + omegaHexadecimal.paddingToLeft()  //  "\\u03A9"

omega.decodingUnicodeCharacters   // "Ω"

推荐阅读