New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
enc=utf-8 環境下での utf-8 の読み込みロジックを改良する #371
Comments
enc=utf-8 fencs=utf-8 で読み込むときはバリデーションしてます |
@ynkdir コード的にどのあたりだか、教えてもらえます? それが真なら順番だけ変えれば良いのかな。 |
仮にバリデーションしてるとしても ucs-2 が utf-8 として valid になる可能性が高いと意味ないか。 今はそんなところ。 |
どうなってたか中身はあんまり覚えてませんが fileio.c:readfile() 内を utf8 とか valid とかで検索するとそれっぽいとこがあると思います。 ちなみに私は fencs=ucs-bom,utf-8,euc-jp,cp932 と設定してます。 00 は utf-8 としては valid なので特に ascii のみのファイルとかははじけないですね。 |
fileio.c:1922 あたりですかね。 となると
これが効いてきますなぁ。 |
日本語において ucs-2 が utf-8 として invalid になる という推測に基づく前提が誤りであるため、 本 issue は閉じます。 |
既にクローズされちゃってますが、 |
それはたまたまutf-8で解釈できないucs-2leができたというだけですよね? |
例えば0x80以上とそれ未満が交互に出てくるような場合は確実にはじけるはず(Vimのコードの確認していませんが) で、私の結論としては、Vim本体の対策は不要で、fencs の指定で utf-8 の後ろに ucs-2 系を加えればいいのではないかということになります。(少なくとも日本語を扱う場合は) |
Tony が 「ucs-2 じゃなくて utf-16 を使え」って言ってるけど、アレはどうだろう? 採用する価値あるかしら? |
あぁ、ucs-2 系よりも utf-16 系の方がいいでしょうね。 |
utf-16 の読みは良いと思いますが、書きはどうなんですかね? |
http://ja.wikipedia.org/wiki/UTF-16#.E6.99.AE.E5.8F.8A これを見る限り大丈夫そうね。一次情報(Microsoft)からの情報でないのがやや不満だけど。 |
ちょっと毛色の違う問題を思いだした。
の時に、utf-8なんだけど壊れたバイトシーケンスを含みかつ全体のサイズが偶数の時って、 結局のところ utf-16 (ucs-2) が貪欲すぎることが問題なんだろう。 ちなみになんでこれを思い出したかっていうと、 |
これについて検討&意見をお願いできますか? |
確かにそうですね。 |
一応、あとでこれ本当にそうなるか確認する。なるならば現状のままとし、ならないなら utf-8 と utf-16 系追加する。 |
試した。なった。 ただし壊し方によっては cp932 として valid になって引っかかるな。根深い問題だわw とりあえずは utf-16le, utf-16be は外します。その他のutf-8にまつわる問題は別issueを立てて対応する方向で。 |
fencs によるコード自動判定の精度を限界まで上げようという試みだった。 |
enc=utf-8 で utf-8 なファイルを読み込む時に、 fencs に ucs-2 などのエンコードがあるとほとんど正しく開けないという問題があります。本 issue はこの問題の解決を目指すものです。
関連: #370
原因
ucs-2 から utf-8 の変換はサイズが偶数である限り、原理的に決して失敗しません。そのため fencs を先頭から順番に試し成功したところでやめる、というVimの戦略では決して utf-8 を開けなくなります。
対策
utf-8 は本来制約が強いため valid かどうか判定することができます(今のVimは enc=utf-8 の時にしていませんが)。それを利用して ucs-2 よりも先にその判定を行なうことで utf-8 として正しく読み込めます。
思い付き
これを理由に guess 的なものを捩じ込めないだろうか。
The text was updated successfully, but these errors were encountered: