Day: January 25, 2017

Swift:エンコード自動判別

エンコードの自動判別機能を追加しました。

やり方はいろいろあるようですが、エンコード方式の自動判別方法紹介(C#)がさんこうになりました。結局、重要なのはロジックでなく、仕様だと思いました。整理すると次のようになります。

screenshot-2017-01-25-22-39-24

C言語はよくわからないというか、書いたことがないので多分こういう意味なんだろうなあと想像しながら、眺めていたら、何となくわかってきました。

躓いたのは、次の点です。

  • 範囲指定をMin <= a && a <= Maxと書くべきところをMin <= a && a >= Maxと書いたために3時間くらい悩みました。
  • UTF-8のはずなのに全然ヒットしません。UTF-8の文字列にヒットしたとき、フラグを上げておき、あとでこれでUTF-8かどうかを見るようにすれば、問題が解決できました。
  • バイト列を取り出さず、インデックスで就職したまま参照した方がステップ数が抑えられます。Swiftはどうかわかりませんが、大昔に使ったIBMのOS開発言語では、コンパイラに気をきかせてアセンブラで書くよりか、コンパイラの言語で書いた方が実行サイズは小さいでした。多分、Swiftも同じです。ステップ数が小さいこと、メモリ使用効率がいいことが大事だと思っています。