字符串转 UTF-32 字符串

String to UTF-32 string

我在这里回答了很多问题,但 none 似乎对我有用。我只是想将我的字符串转换为 UTF-32 字符串。如图所示

var str = "Your"

let dataenc = str.data(using: String.Encoding.utf32)

extension Data {
    func hexEncodedString() -> String {
        return map { String(format: "%04hhx", [=10=]) }.joined()
    }
}

let data = str.data(using: .utf16)!
let hexString = data.map{ String(format:"%02x", [=10=]) }.joined()

print(data.hexEncodedString())
print(hexString)

这行不通

我得到的输出是

00ff00fe00590000006f00000075000000720000

fffe59006f0075007200

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

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

extension Data {
    func hexEncodedString() -> String {
        return map { String(format: "%02x", [=10=]) }.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。