有没有办法在 swift 中从 utf16 数组创建字符串?

2024-02-23

我们知道 String.utf16 提供代码单元或 String.unicodeScalars 提供标量。

如果我们通过删除一些元素等来操作 codeunits 和 unicodeScales ,有没有办法构造回结果字符串?


Swift 2.1 更新:

您可以创建一个String来自 UTF-16 字符数组 与

public init(utf16CodeUnits: UnsafePointer<unichar>, count: Int)

初始化程序。例子:

let str = "H€llo ????"

// String to UTF16 array:
let utf16array = Array(str.utf16)
print(utf16array)
// Output: [72, 8364, 108, 108, 111, 32, 55357, 56836]

// UTF16 array to string:
let str2 = String(utf16CodeUnits: utf16array, count: utf16array.count)
print(str2)
// H€llo ????

之前的回答:

没有什么“内置”的(据我所知),但你可以使用UTF16结构体 它提供了一个decode() method:

extension String {

    init?(utf16chars:[UInt16]) {
        var str = ""
        var generator = utf16chars.generate()
        var utf16 : UTF16 = UTF16()
        var done = false
        while !done {
            let r = utf16.decode(&generator)
            switch (r) {
            case .EmptyInput:
                done = true
            case let .Result(val):
                str.append(Character(val))
            case .Error:
                return nil
            }
        }
        self = str
    }
}

Example:

let str = "H€llo ????"

// String to UTF16 array:
let utf16array = Array(str.utf16)
print(utf16array)
// Output: [72, 8364, 108, 108, 111, 32, 55357, 56836]

// UTF16 array to string:
if let str2 = String(utf16chars: utf16array) {
    print(str2)
    // Output: H€llo ????
}

微微多一点generic,您可以定义一个创建字符串的方法 使用给定的编解码器从代码点数组(或任何序列)中:

extension String {
    init?<S : SequenceType, C : UnicodeCodecType where S.Generator.Element == C.CodeUnit>
        (codeUnits : S, var codec : C) {
        var str = ""
        var generator = codeUnits.generate()
        var done = false
        while !done {
            let r = codec.decode(&generator)
            switch (r) {
            case .EmptyInput:
                done = true
            case let .Result(val):
                str.append(Character(val))
            case .Error:
                return nil
            }
        }
        self = str
    }
}

然后从 UTF16 的转换完成如下

if let str2a = String(codeUnits: utf16array, codec: UTF16()) {
    print(str2a)
}

这是另一种可能的解决方案。虽然前面的方法是“纯 Swift”,但这个方法使用 Foundation 框架和自动 之间的桥梁NSString和斯威夫特String:

extension String {

    init?(utf16chars:[UInt16]) {
        let data = NSData(bytes: utf16chars, length: utf16chars.count * sizeof(UInt16))
        if let ns = NSString(data: data, encoding: NSUTF16LittleEndianStringEncoding) {
            self = ns as String
        } else {
            return nil
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法在 swift 中从 utf16 数组创建字符串? 的相关文章

  • 将数组转换为具有默认值的对象的更简洁方法? (洛达什可用)

    我有一个数组 比如说 a b c 我想将其转换为一个对象 该对象以数组值作为键和我可以设置的默认值 所以如果默认值是true 我希望我的输出是 a true b true c true 下面的代码是否有更简洁的版本来实现此目的 var my
  • 从xcode上触摸屏的坐标获取ImageView的像素数据?

    单击视图并从视图内的图像获取正确的像素数据似乎存在问题 func handleTap gestureRecognizer UIGestureRecognizer print You tapped at gestureRecognizer l
  • 按字符分割字符串

    scala 有一个标准的分割字符串的方法StringOps split 但它的行为有点让我惊讶 演示一下 使用快捷便利功能 def sp str String str split toList 以下表达式全部计算结果为 true sp Li
  • array_merge 更改键

    我得到以下数组 arr array 6 gt Somedata 7 gt Somedata1 8 gt Somedata2 问题是 当我使用array merge array Select the data arr 它确实将数组键更改为 A
  • .showsPhysics 内存泄漏

    我最近花了 5 个小时尝试调试 Spritekit 应用程序中的内存泄漏 应用程序启动后 我注意到内存使用量略有上升 我花了 5 个小时中的 3 个小时挖掘参考资料 了解强与弱的关系ARC https developer apple com
  • 如何从数组中提取特定元素?

    如果我有一个数组a 1 2 3 4 5 6 7 8 9 10 我想要这个数组的一个子集 第 1 个 第 5 个和第 7 个元素 是否可以通过简单的方式从该数组中提取这些内容 我在想这样的事情 a 0 4 6 1 5 7 但这行不通 还有一种
  • 如何使用 Vapor 和 Leaf 将图像从浏览器上传到 Amazon S3?

    我已经设置了 AWS S3 存储桶 并且可以使用 Vapor 3 和 Postman 上传文件 PUT request 和标头 x amz acl public read 但我想从浏览器中执行此操作 我使用的是 leaf 那么如何从浏览器上
  • 在 C 中将字符追加到字符数组

    我想将一个字符附加到代表字符串的字符数组中 我正在使用结构来表示字符串 struct String char c int length int maxLength String realloc弄乱了我的数组 当我打印字符串时 它会从内存中打
  • 如何制作带有 SWIFT 图像的弹出窗口

    我想知道如何制作类似于此示例的弹出窗口 原始窗口充满了按钮 选择这些按钮后将拉出我想要使用的图像 我会简单地创建一个可重用的UIView组件以及作为子视图所需的一切 例如UIImageView为了你的形象 UILabel or a UIBu
  • 从 numpy 数组中删除连续的 RGB 值

    我最初根据灰度图像的初始数组创建了一个子数组 从 numpy 数组中删除连续数字 https stackoverflow com questions 50743769 deleting consecutive numbers from a
  • Java中有没有一种方法可以通过名称实例化一个类?

    我正在寻找问题 从字符串名称实例化一个类 https stackoverflow com questions 9854900 instantiate an class from its string name它描述了如何在有名称的情况下实例
  • 如何检查字符串是否为有效日期

    我有一个字符串 31 02 2010 并想检查它是否是有效日期 最好的方法是什么 我需要一个方法 如果字符串是有效日期 则返回 true 如果不是 则返回 false require date begin Date parse 31 02
  • AVAssetExportSession 无法导出从 iCloud 下载的视频

    我正在尝试创建从用户相册中选择的视频的缩小版本 输出的最大尺寸为 720p 因此 在检索视频时 我使用 mediumQualityFormat as the deliveryMode 如果用户设备中不存在原始视频或其中等质量版本 这会导致
  • UIViewControllerAnimatedTransitioning:旋转更改后黑屏片段

    我已经创建了一个视图控制器转换 只要我不更改设备方向 一切都正常 图 1 显示了应有的屏幕 然后我切换到下一个视图控制器 在其中更改方向 现在我回到第一个视图控制器并再次切换方向 然后我得到的结果如图 2 所示 出现黑色边框 请不要介意屏幕
  • 检查 JavaScript 字符串是否为 URL

    JavaScript 有没有办法检查字符串是否是 URL 正则表达式被排除在外 因为 URL 很可能是这样写的stackoverflow 也就是说它可能没有 com www or http 如果你想检查一个字符串是否是有效的 HTTP UR
  • PHP 中只保留数组的前 N ​​个元素? [复制]

    这个问题在这里已经有答案了 有没有办法只保留数组的前 N 个 例如 10 个 元素 我知道有array pop 但是有没有更好 更优雅的方法呢 您可以使用array slice http php net array slice or arr
  • UIView 圆角 - Swift 2.0?

    我会尝试将一些项目更新到 Swift 2 0 我有一个视图 左上角有一个圆角 在 Swift 没有警告 没有错误 只是没有圆角 这就是它在 Swift let maskPath UIBezierPath roundedRect conten
  • 如何将 ascii 值列表转换为 python 中的字符串?

    我在 Python 程序中有一个列表 其中包含一系列数字 这些数字本身就是 ASCII 值 如何将其转换为可以在屏幕上回显的 常规 字符串 您可能正在寻找 chr gt gt gt L 104 101 108 108 111 44 32 1
  • iPhone 上的纵向 UISplitViewController 在 iOS 8 中始终显示主视图和细节视图

    UISplitViewController in portrait在 iPhone 上始终显示主控和细节iOS 8 我尝试子类化UISplitViewController并将其配置为同时显示主视图和细节视图 但没有任何效果 class AP
  • SpriteKit的更新函数:时间与帧率

    一般来说 我对编程和 Spritekit 很陌生 并且有兴趣探索毫秒和帧率之间的关系 以及如何使用更新函数作为两者之间的中介 帧率与毫秒 从本质上讲 帧速率和时间之间的主要区别在于时间始终一致 而帧速率则不然 由于密集的图形程序 它可能会下

随机推荐

  • npm本地安装

    过去 当我使用 npm gt 1 0 安装软件包时 它们会在本地安装 但现在不再了 我的设置 首先我使用nvm https github com creationix nvm安装node js 我的操作系统 alfred alfred la
  • 检测存在哪些 Unicode 字形?

    JavaScript CSS web 中有没有办法检测系统是否具有某个 Unicode 字符的有效字形 例如 我想检测某种语言中的某个字符是否显示为方框 因为用户没有显示这些 Unicode 点的字体 或者他们是否确实会看到这些字符 这里描
  • 属性与实例变量[重复]

    这个问题在这里已经有答案了 可能的重复 Objective c cocoa cocoa touch 中的 实例变量 和 属性 之间有区别吗 https stackoverflow com questions 843632 is there
  • 如何为 asp.net 身份创建安全标记值 (IUserSecurityStampStore)

    在我的 MVC 5 应用程序中 我必须手动创建安全标记值 身份团队当前的实现似乎使用了指南 Guid NewGuid ToString D 我自己创建一个新的 Guid 来用作新的安全标记值是否安全 或者这是否会在将来的 ASP NET 身
  • Mongo PHP 驱动程序 1.2.10 与 MAMP

    我正在尝试让最新的 Mongo 驱动程序与 OS X 10 5 8 上的 MAMP 1 9 6 一起使用 我从源代码成功构建了它 因为似乎没有预编译版本 将其包含到正确的目录中并重新启动了 apache 但 PHP 无法识别该扩展名 我之前
  • CSS:发光文本,发光非常宽和高

    几天以来我一直在研究 box shadow 和 text shadow 我正在努力获得以下效果 我想要从文字中散发出光芒 a 一度盘旋 很简单 这应该很容易 因为我探索了使用文本阴影 好的 但它适用于小发光 我的意思是 一旦发光较大 由于其
  • Eclipse 在接口方法签名中生成无用的“公共抽象”修饰符

    在使用 Eclipse 重构工具提取方法时 有没有办法阻止生成无用的内容public abstract接口方法签名中的修饰符 谢谢阿列克谢 这听起来像是一个 Eclipse 错误 但它有一个解决方法 该错误自 2004 年 8 月 9 日起
  • CFHTTPMessageAddAuthentication 无法向请求添加身份验证数据

    我正在尝试扩展功能SocketRocket https github com square SocketRocket图书馆 我想添加身份验证功能 由于该库正在使用CFNetwork CFHTTPMessage API https devel
  • 如何在离线服务器上安装 npm -g

    我需要在离线服务器上安装 全局 npm 应用程序 安装普通应用程序很容易 npm install 然后打包生成的文件 手动或使用npm pack 但是 如何安装全局应用程序 具有某种安装脚本 例如forever没有互联网 npm insta
  • 在同一个 R markdown 页面中应用多列划分

    我想如图所示分割我的 Rmarkdown 文档 第一部分为一列 其他部分为两列 used onecolumn and twocolumn但每个部分都是在单个页面中创建的 有解决办法吗 This article https journals
  • 如何在jquery中获取tinymce内容?

    我正在尝试获取tinymce数据 但收到tinyMCE未定义错误 这是我的代码 function savePost console log jQuery wp tinymce editor tinyMCE getContent 请检查 Ti
  • 使用 knockout js 和 jquery ui 滑块

    我试图弄清楚knockout js是否可以很好地解决以下问题 我有多个滑块想要链接到文本框 当文本框更改时 相应的滑块必须更新为新值 反之亦然 更改滑块值或文本框时 需要调用一个函数 该函数使用所有文本框的输入来计算结果 我有我的快速但肮脏
  • 从 Google App Engine (Java) 将文件上传到 Google 云存储

    如何将文件从谷歌应用程序引擎中的servlet上传到谷歌云存储 当我这样做时 Google 云存储不知道文件的类型 即我从 HTML 表单发送的文件 编写 HTML JavaScript 和 servlet 将文件上传到云存储的正确方法是什
  • v-dialog Vuetify 的自定义位置

    我需要在页面右下角打开一个具有一定宽度和高度的 v 对话框 但是 我不明白该怎么做 V dialog总是在页面居中 我搜索了官方文档 尝试使用CSS 但无法 有任何想法吗 Note 其他提供的解决方案并不令人满意 因为它们搞乱了转换 或者我
  • 使用exist()的Cloud firestore规则是否算作读取?

    我正在存储被阻止用户的文档集合 我通过检查电子邮件是否存在于被阻止的集合中来检查请求是否来自被阻止的用户 allow read if exists databases database documents blocked request a
  • 如何将当前cygwin目录转换为windows格式

    显示我正在使用的当前目录 pwd在 Cygwin 中运行良好 This document https cygwin com cygwin ug net using effectively html正在解释如何将 cygwin 目录转换为 w
  • 存储库是单例还是静态还是都不是?

    我有一个 ASP NET 网站 它使用域驱动设计并使用存储库进行数据库操作 我想知道单例存储库和静态存储库以及每次访问都会新增的简单存储库类的优缺点是什么 此外 如果有人可以比较并指导我使用其中的哪一个 我将不胜感激 静态和单例对于存储库模
  • Jquery 验证错误放置(单选按钮)

    我正在尝试使用 Jquery 验证插件来验证我的表单 我的大多数输入元素的右侧都会出现错误消息 但单选按钮只会给我带来麻烦 如果我没有给出 div group 类的宽度 错误消息会出现在整个页面的外部 因为我假设 div 宽度是页面的 10
  • 安装 Shield LE - 错误 6058 ...在 64 位中合并 Visual C++ 10.0 CRT

    我正在尝试编译一个安装屏蔽项目 这是一个 64 位程序 我不断收到此错误 尽管它确实编译正常并安装正常 Error 16 6058 Error merging Visual C 10 0 CRT IA64 with module ID C
  • 有没有办法在 swift 中从 utf16 数组创建字符串?

    我们知道 String utf16 提供代码单元或 String unicodeScalars 提供标量 如果我们通过删除一些元素等来操作 codeunits 和 unicodeScales 有没有办法构造回结果字符串 Swift 2 1