パスワードを忘れた? アカウント作成
452543 journal

kubotaの日記: 文字コード自動判別 / lv新パッチ人柱募集 2

日記 by kubota
文字コード自動判別で、EUC-JP の「名前」が UTF-8 と誤認される問題ですが、じつは UTF-8 として正しいシーケンスではなかったということがわかりました。(坂本さんありがとうございます)

というわけで、そのへんのチェックを厳しくした新パッチです。試してみてくださいませ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • Linux じゃなくて Solaris ですが, UTF-8/eucJP/SJIS の判別が,手元にあるデータの範囲内では正常動作することを確認しました.

    ところで,いくつか問題を見つけたので報告します.

    • setlocale() の返却値に NULL がきたときの対処がない.たとえば:
      env LANG=xyzzy lv /etc/profile
      のように,存在しないロケール名を環境変数に指定すると,core を吐いて死にます.
    • ロケール名が xx_YY の形式であることに依存した部分がある. たとえば,Solaris では ja とか ko とかいったロケール名が存在します.
    • コードセット名が glibc 依存になっている.他のシステムでは名前が違っている可能性があるので,できる限り対応しておいた方がいいでしょう.

    パッチは,別途メールでお送りします.

    • ありがとうございます。ためしてみます。setlocale() や nl_langinfo() の返り値ですが、どれくらい広い範囲に対応しないといけないかよくわからないので、大文字・小文字は無視したり、ハイフンやアンダースコアも無視するような文字列比較ルーチンを作ってそれを用いたほうがいいかもしれません。

      ほんとうは、configure で nl_langinfo() の有無を調べるなどしたほうがいいのかもしれませんが、そのへん、どうでしょうか? もちろん、あったほうがいいのでしょうが、バグが混入したり、テストしきれなかったりするリスクとの比較で。

      親コメント
typodupeerror

私は悩みをリストアップし始めたが、そのあまりの長さにいやけがさし、何も考えないことにした。-- Robert C. Pike

読み込み中...