忍者ブログ
natsuの秘密基地です
はまり
はまり一件ごとのお話の流れです
カレンダー
03 2020/04 05
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
プロフィール
HN:
natsu
性別:
男性
趣味:
酒など
自己紹介:
ここに書かれていることはフィクションです。
ブログ内検索
アクセス解析
[37] [36] [35] [34] [32] [29] [28] [27
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

すでになにか別の処理で、
テキストファイルからテキストをメモリに読み取ってあるのなら、
stringWithCString:encodingを使えば、
そのメモリ領域にあるデータからNSStringを作成できると思った。
 
私の場合、encodingについては既に割れているので、
それを引数にstringWithCString:encodingを使う。
 
 
らくちんぽん。とおもいきや。
 
 
UTF-16でどうもうまくいかない。
 
ん?こいつどうやってUTF-16の終端を判断してるんだ?
とおもった。
長さを渡していないので、
終端を表す何かが必要なはず。
 
UTF-16でASCII文字を使うと、1バイト分データの空きが出る。
そう。そこはヌル文字。
なので、ほかの文字列と同じようには
UTF-16ではヌル文字で終端を表せない。
2バイト連続ヌル文字を使えばいいのだろうけど、
そんな話は聞いたこと無い。
ちなみにやってみたけど駄目。


 
unicharの配列だと可能だろうけど、
stringWithCStringはふつうにcharの配列を受け取るから。
 
もし、stringWithCString:encoding内部で、
ヌル文字を終端として扱っているなら、
このメソッドではUTF-16は扱えないように思えた。
 
 
そんななかにもかすかな光が。
 
 
stringWithCString:length:は長さが指定できる。
そして、試したところBOM無しのリトルエンディアンUTF-16も
同様にBOM無しのビッグエンディアンUTF-16もちゃんと読み込めた。
 
ん?Deprecated in Mac OS X v10.4?
あ。自分、英語読めませんのですいませんが。
 
 
なんか光が消えた。
 
 
そんななかにもかすかな光が。
 
 
stringWithCharacters:length:というメソッドがある。
引数にconst unichar *と長さが渡せる。
 
もう。いかにもいけそうな予感。


 
結論から言うといける。
ビッグエンディアンなら。

リトルエンディアンのときはBOMをつけてもだめ。
んもー。またぐちゃぐちゃ。
 
 
あー。なんならスワップしますけど、します?
 
 
またもや、そんななかにもかすかな光が。
 
 
initWithBytes:length:encoding:というメソッドがあった。
長さもエンコードも指定できる。
ええんよ、ええんよ。
どっちもわかってるから。
ちゃんと動いてくれれば。
 
...
動いた!
 
 
えっと。クラスメソッド版は無いんですね...
allocしなきゃだめですか。
 
 
そうですか。
 
PR
この記事にコメントする
NAME:
TITLE:
color:
MAIL:
URL:
COMMENT:
PASS: Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:


Copyright (C) 2010 NEST,
All right Resieved.*Powered by ニンジャブログ *Designed by にこるん  / 忍者ブログ / [PR]