字符串为UTF-32字符串

时间:2017-10-31 03:27:12

标签: swift utf

我在这里经历了很多问题,但似乎没有一个问题适合我。我只想将我的字符串转换为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)

这不起作用

我得到的输出是

  

00ff00fe00590000006f00000075000000720000

     

fffe59006f0075007200

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

1 个答案:

答案 0 :(得分:1)

要获得相同的结果,您需要使用.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())

输出:

  

000000590000006f0000007500000072

请注意,当仅使用.utf32时,字符串“Your”会获得20个字节,但使用.utf32BigEndian时,只能获得相同字符串的16个字节。那些额外的4个字节代表“BOM”(字节顺序标记)。在您的情况下,使用.utf32的结果为您提供了“little-endian”格式的数据,并在数据的开头添加了“BOM”。这就是为什么数据以额外的00ff00fe(BOM)开始,接下来的4个字节中的每一个都以错误的顺序出现。

明确说明.utf32BigEndian将字节按所需顺序排列并消除BOM。