natsuの秘密基地です
カレンダー
10 | 2024/11 | 12 |
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
性別:
男性
趣味:
酒など
自己紹介:
ここに書かれていることはフィクションです。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
すでになにか別の処理で、
リトルエンディアンのときはBOMをつけてもだめ。
テキストファイルからテキストをメモリに読み取ってあるのなら、
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
この記事にコメントする