将UInt32(UTF-32)转换为Swift中的string

我有一个UInt32值的数组。 我想将这个数组转换为一个String

这不起作用:

 let myUInt32Array: [UInt32] = [72, 101, 108, 108, 111, 128049] let myString = String(myUInt32Array) // error let myString = String(stringInterpolationSegment: myUInt32Array) // [72, 101, 108, 108, 111, 128049] (not what I want) 

这些SOpost显示UTF8UTF16

  • 我怎样才能在Swift中从UTF8创build一个string?
  • 有没有办法在swift中从utf16数组创build一个string?

使用基类NSData / NSString这可以完成

 let myUInt32Array: [UInt32] = [72, 101, 108, 108, 111, 128049, 127465, 127466] let data = NSData(bytes: myUInt32Array, length: myUInt32Array.count * sizeof(UInt32)) let myString = NSString(data: data, encoding: NSUTF32LittleEndianStringEncoding) as! String println(myString) // Hello🐱🇩🇪 

强制转换as! String as! String在这里使用,因为从UTF-32代码指向string转换不能失败。

为了方便您可以定义一个String扩展名

 extension String { init(utf32chars:[UInt32]) { let data = NSData(bytes: utf32chars, length: utf32chars.count * sizeof(UInt32)) self = NSString(data: data, encoding: NSUTF32LittleEndianStringEncoding) as! String } } 

并将其用作

 let myUInt32Array: [UInt32] = [72, 101, 108, 108, 111, 128049, 127465, 127466] let myString = String(utf32chars: myUInt32Array) println(myString) // Hello🐱🇩🇪 

只是为了完整性,通用转换器从https://stackoverflow.com/a/24757284/1187415

 extension String { init?<C : UnicodeCodecType>(codeUnits:[C.CodeUnit], 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 } } 

可以与UTF-8,UTF-16和UTF-32input一起使用。 在你的情况下,将是

 let myUInt32Array: [UInt32] = [72, 101, 108, 108, 111, 128049, 127465, 127466] let myString = String(codeUnits: myUInt32Array, codec : UTF32())! println(myString) // Hello🐱🇩🇪 

UnicodeScalarUInt32的types别名。 所以将您的UInt32值转换为UnicodeScalar ,然后将它们附加到一个String

 let myUInt32Array: [UInt32] = [72, 101, 108, 108, 111, 128049] var myString: String = "" for value in myUInt32Array { if let scalar = UnicodeScalar(value) { myString.append(Character(scalar)) } } print(myString) // Hello🐱