Refsort/Ruby 2.20 リリース
7月末に v2.16 をリリースして,もう直すところはほとんどない,などと傲慢なことを言っていると,痛いしっぺ返しが来ました.今回も,新しい辞書ファイルを準備していて思わぬバグに遭遇し,あわてて修正を施したものです.
今回の修正はかなり根本的な部分で,何と入出力のエンコーディングの方針の変更です.これまでは,内部エンコーディングはプラットフォームにとって最も自然な locale に従うようにしていて,それはある意味正しいのですが,Windows 環境では Unicode ではなく Windows-31J が locale として設定されており,それでは複数の言語をまとめて扱うときには無理が生じます.例えば,ドイツ語のウムラウトや,スペイン語やフランス語のアクセント符号など.これらを含む UTF-8 でエンコードされているファイルを読み込もうとしても,内部エンコーディングが Windows-31J では変換できない!というエラーになります.
従って,それまでの方針を大転換し,内部エンコーディングは辞書ファイルや入力のエンコーディングをそのまま使用することとしました.しかも,出力にも同じエンコーディングを使用することにしました.これで,UTF-8 で書かれたファイルをそのまま読み込み,処理ののち,UTF-8 で無理なく出力することが出来るようになりました.
ただし制約条件が一つあって,それは改行記号です.改行記号はプラットフォーム依存なので,入出力のエンコーディングを UTF-8 で行えたとしても,改行記号は CR+LF という Windows の標準のままです.逆に Unix では,Windows-31J のファイルを読み込み,処理の後に Windows-31J で書き出せたとしても,改行記号は LF です.読み込んだファイルの改行記号を分析して,それを使えばよいのですが,Ruby では標準の universal newline がかえってあだになり,この処理はそう簡単ではないと思われたので,今回は実装していません.
基本的には,プラットフォームに合ったエンコーディングが推奨されるのですが,しかし,多国語を使うときには Unicode は必須になってきているので,Windows 側の改革が望まれるところです.
| 固定リンク | 0
「IT関連情報」カテゴリの記事
- IOC List v14.2 Released(2024.08.27)
- Ruby を自力ビルドしてみた(2024.07.25)
- Excel上でPythonが使える(2024.07.15)
- WSL2 をインストールして使っています(2024.06.19)
- Windows 再インストール時に VMD でハマる(2024.04.13)
コメント