代码之家  ›  专栏  ›  技术社区  ›  rv7284

字符串到UTF-32字符串

  •  0
  • rv7284  · 技术社区  · 7 年前

    我在这里遇到了很多问题,但似乎没有一个适合我。我只是想把我的字符串转换成UTF-32字符串。如图所示 enter image description here

    var str = "Your"
    
    let dataenc = str.data(using: String.Encoding.utf32)
    
    extension Data {
        func hexEncodedString() -> String {
            return map { String(format: "%04hhx", $0) }.joined()
        }
    }
    
    let data = str.data(using: .utf16)!
    let hexString = data.map{ String(format:"%02x", $0) }.joined()
    
    print(data.hexEncodedString())
    print(hexString)
    

    这行不通

    我得到的输出是

    00FF00FE005900006F0000075000000720000

    不知道该怎么办。提前谢谢。

    1 回复  |  直到 7 年前
        1
  •  2
  •   rmaddy    7 年前

    为了获得相同的结果,您需要使用 .utf32BigEndian 字符串编码。

    extension Data {
        func hexEncodedString() -> String {
            return map { String(format: "%02x", $0) }.joined()
        }
    }
    
    var str = "Your"
    let dataenc = str.data(using: .utf32BigEndian)!
    print(dataenc.hexEncodedString())
    

    输出:

    000000 59000006F000007500000072

    注意,当使用 .utf32 字符串“Your”有20个字节,但是 .UTF32比根迪亚语 同一个字符串只能得到16个字节。额外的4个字节表示“BOM”(字节顺序标记)。在您的情况下,使用 .utf32 以“little endian”格式向您提供数据,数据开头带有“BOM”。这就是为什么数据以额外的开始 00ff00fe (BOM)和接下来的4个字节中的每一个都以错误的顺序出现。

    明确说明 .UTF32比根迪亚语 将字节按所需顺序排列,并删除BOM表。