   ) {
     self = String.decodeCString(nullTerminatedCodeUnits, as: sourceEncoding)!.0
   }
+
+  @_specialize(where Encoding == Unicode.UTF8)
+  @_specialize(where Encoding == Unicode.UTF16)
+  @inlinable
+  @_alwaysEmitIntoClient
+  @available(*, deprecated, message: "Operate directly on the String")
+  public init<Encoding: _UnicodeEncoding>(
+    decodingCString nullTerminatedCodeUnits: String,
+    as sourceEncoding: Encoding.Type
+  ) {
+    self = nullTerminatedCodeUnits.withCString(encodedAs: sourceEncoding) {
+      String(decodingCString: $0, as: sourceEncoding.self)
+    }
+  }
 }
 
 extension UnsafePointer where Pointee == UInt8 {

    }
  }

  /// Creates a string from the null-terminated sequence of bytes at the given
  /// pointer.
  ///

    }
  }

  @inlinable
  @_alwaysEmitIntoClient
  @available(*, deprecated, message: "Operate directly on the String")
  public init(cString nullTerminatedUTF8: String) {
    self = nullTerminatedUTF8.withCString(String.init(cString:))
  }

  /// Creates a new string by copying and validating the null-terminated UTF-8
  /// data referenced by the given pointer.
  ///
