超手抜き版の文字コード識別クラスを作ってみた.環境は以下のとおり.
- Squeak3.10beta.7137
- Squeak-web beta image 0.128
対象とするのは日本語のみで, EUC, UTF8, UTF16, JIS (iso-2022-jp), SJIS, Latin1 (iso-8859-1) だけ.
画像のとおり SJIS 半角カナ混じりは表示されるが, EUC 半角カナ混じりは最初の半角カナ以降が表示されない.
- 文字コード判定クラス: NR-TextConversion.1.cs
- Pier からの読み出し: Pier-Patches-310.4.cs
これより古いイメージ等で, Pier-Seaside-lr.181 を使っている場合 (具体的には PRViewRenderer>>visitFile が下記のもの) がある.
visitFile: anObject | file url | file := anObject file ifNil: [ ^ self ]. file isText ifTrue: [ ^ html preformatted: anObject contents ]. url := file urlOn: html. file isImage ifTrue: [ ^ html image url: url; altText: anObject title ]. html anchor url: url; with: anObject title
この場合は Pier-Patches-310.4.cs の替わりに, Pier-Patches-310.3.cs をインストール.ここは直訴が通って Pier-Seaside-lr.182 で修正された (Pier-All-lr.219.mcz).
- 文字コード判定クラスは Pier, Seaside からは独立しているので単体で使用することが出来る.
- 文字コード判定はストリームの先頭 2048 バイトを使用する.このサイズを変更するときは,
NREncodingRecognizer readLimit: 指定バイト数
を実行する. 0 を指定するとストリーム全体を判定対象とする. - ユニット・テスト: NR-Tests-TextConversion.zip
をを!すばらしい。文字コード判定は他にも使えて便利そうですね。
返信削除