ほかの文字列と同じようにはUTF-16ではヌル文字で終端を表せない。2バイト連続ヌル文字を使えばいいのだろうけど、そんな話は聞いたこと無い。ちなみにやってみたけど駄目。unicharの配列だと可能だろうけど、stringWithCStringはふつうにcharの配列を受け取るから。stringWithCString:encoding内部で、ヌル文字を終端として扱っているなら、このメソッドではUTF-16は扱えないように思えた。そんななかにもかすかな光が。stringWithCString:length:は長さが指定できる。試したところBOM無しのリトルエンディアンUTF-16も同様にBOM無しのビッグエンディアンUTF-16もちゃんと読み込めた。自分、英語読めませんのですいませんが。そんななかにもかすかな光が。stringWithCharacters:length:というメソッドがある。