代码之家  ›  专栏  ›  技术社区  ›  swiftPunk Alexander

在Swift中构建Unicode标量字符串

  •  -2
  • swiftPunk Alexander  · 技术社区  · 4 年前

    “\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)   // "Ω"
    
    1 回复  |  直到 4 年前
        1
  •  2
  •   Leo Dabus    4 年前

    您可以将字符串填充到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   // "Ω"
    
        2
  •  0
  •   Sulthan    4 年前

    let omega = UnicodeScalar(0x3A9)!
    print(String(omega)) // Ω