You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将通过\u{ea12}格式创建的Swift字符串转换回对应的十六进制值ea12?

解决Swift字符转CSS Unicode转义的问题

你的问题出在用UTF-8编码字节来生成十六进制值,而自定义图标字体里的字符大多属于Unicode补充平面(比如U+EA12),这类字符在UTF-8中会被编码成多个字节,导致你得到的是字节拼接的十六进制,而不是原字符的Unicode标量值。

正确实现思路

每个图标字符串都是单个Unicode字符,我们需要直接获取这个字符的Unicode标量值,然后将其转换为小写十六进制字符串,再按照CSS的格式输出即可。

修改后的dumpCSS函数

func dumpCSS() { 
    for (id, icon) in icons { 
        // 取第一个Unicode标量(因为每个图标都是单个字符)
        guard let scalar = icon.unicodeScalars.first else { 
            print("Error: Invalid icon for id '\(id)'") 
            continue 
        }
        // 将标量值转为小写十六进制字符串
        let hexCode = String(scalar.value, radix: 16, uppercase: false)
        // 输出符合CSS格式的代码
        print(".icon-\(id):before { content: '\\\(hexCode)'; }") 
    } 
}

为什么之前的方法错误?

举个例子,你要处理的"\u{ea12}"对应的是Unicode标量U+EA12:

  • 用UTF-8编码时,它会被拆分为三个字节:0xEE、0xA8、0x92,所以你之前的代码会拼接出eea892,这显然不是你要的结果;
  • 而直接读取Unicode标量值,得到的是0xEA12,转成十六进制就是ea12,和原始CSS中的格式完全一致。

验证结果

运行修改后的函数,你会得到正确的输出:

.icon-123:before { content: '\2c'; } // 正确
.icon-XYZ:before { content: '\ea12'; } // 正确
.icon-abc:before { content: '\e07'; } // 正确

内容的提问来源于stack exchange,提问作者Andrei Herford

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 20:42:36