Ahm*_*d F 2 string unicode character codepoint swift
作为通用解决方案,我们如何在 Swift 中获取字符或字符串的 unicode 代码点?
\n\n考虑以下:
\n\nlet A: Character = "A" // "\\u{0041}"\nlet A\xcc\x81: Character = "A\xcc\x81" // "\\u{0041}\\u{0301}"\n\nlet sparklingHeart = "" // "\\u{1F496}"\nlet SWIFT = "SWIFT" // "\\u{0053}\\u{0057}\\u{0049}\\u{0046}\\u{0054}"\nRun Code Online (Sandbox Code Playgroud)\n\n如果我没有记错的话,所需的函数可能会返回一个字符串数组,例如:
\n\nextension Character {\n func getUnicodeCodePoints() -> [String] {\n //...\n }\n}\n\nA.getUnicodeCodePoints()\n// the output should be: ["\\u{0041}"]\n\nA\xcc\x81.getUnicodeCodePoints()\n// the output should be: ["\\u{0041}", "\\u{0301}"]\n\nsparklingHeart.getUnicodeCodePoints()\n// the output should be: ["\\u{1F496}"]\n\nSWIFT.getUnicodeCodePoints()\n// the output should be: ["\\u{0053}", "\\u{0057}", "\\u{0049}", "\\u{0046}", "\\u{0054}"]\nRun Code Online (Sandbox Code Playgroud)\n\n任何更多建议的优雅方法将不胜感激。
\n通常,unicodeScalarsa 的属性String返回其 unicode 标量值的集合。(Unicode 标量值是除高代理项和低代理项代码点之外的任何\nUnicode 代码点。)
例子:
\n\nprint(Array("\xc3\x81".unicodeScalars)) // ["A", "\\u{0301}"]\nprint(Array("".unicodeScalars)) // ["\\u{0001F496}"]\nRun Code Online (Sandbox Code Playgroud)\n\n在 Swift 3 之前,无法Character直接访问 \na 的 unicode 标量值,必须\n将其转换为 aString(对于 Swift 4 状态,请参见下文)。
如果您想将所有 Unicode 标量值视为十六进制数字\n那么您可以访问该value属性(这是一个UInt32数字)\n并根据您的需要对其进行格式化。
示例(使用U+NNNNUnicode 值的表示法):
extension String {\n func getUnicodeCodePoints() -> [String] {\n return unicodeScalars.map { "U+" + String($0.value, radix: 16, uppercase: true) }\n }\n}\n\nextension Character {\n func getUnicodeCodePoints() -> [String] {\n return String(self).getUnicodeCodePoints()\n }\n}\n\n\nprint("A".getUnicodeCodePoints()) // ["U+41"]\nprint("\xc3\x81".getUnicodeCodePoints()) // ["U+41", "U+301"]\nprint("".getUnicodeCodePoints()) // ["U+1F496"]\nprint("SWIFT".getUnicodeCodePoints()) // ["U+53", "U+57", "U+49", "U+46", "U+54"]\nprint("".getUnicodeCodePoints()) // ["U+1F1EF", "U+1F1F4"]\nRun Code Online (Sandbox Code Playgroud)\n\nSwift 4 更新:
\n\n从 Swift 4 开始,可以直接访问unicodeScalarsa ,\n请参阅SE-0178 将 unicodeScalars 属性添加到 Character。这使得转换为CharacterString过时:
let c: Character = ""\nprint(Array(c.unicodeScalars)) // ["\\u{0001F1EF}", "\\u{0001F1F4}"]\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1884 次 |
| 最近记录: |