Skip to content

Instantly share code, notes, and snippets.

@ernix
Last active June 9, 2025 01:10
Show Gist options
  • Select an option

  • Save ernix/e008320eb34212f69cbe025b6250988f to your computer and use it in GitHub Desktop.

Select an option

Save ernix/e008320eb34212f69cbe025b6250988f to your computer and use it in GitHub Desktop.
set fileencodings=ucs-bom,utf-8,cp51932,euc-jp-ms,cp932,gb18030
autocmd BufReadPost * if search('\%x1b\(\$[B@]\|([BJI]\)', 'w') > 0 |
\ e ++enc=cp50221 | endif
autocmd BufReadPost * if &fileencoding ==# 'cp50221' |
\ setlocal fileencoding=iso-2022-jp | endif
autocmd BufReadPost * if &fileencoding ==# 'cp51932' |
\ setlocal fileencoding=euc-jp | endif
autocmd BufReadPost * if &fileencoding ==# 'euc-jp-ms' |
\ setlocal fileencoding=euc-jp | endif
" 日本語の文字エンコーディングを取り巻く環境は混沌としている。
" 過去のベンダーの囲い込み戦略もあり、多くの文字エンコーディングは言葉通りの意味を持たない。
" エディタが取るべきスタンスはファイルを開く際に寛容的に振る舞い、ファイルを保存する際は
" 厳格にIANAが定めた文字エンコーディングに従うことである。
" 1. BOMがあればそのBOMが定めた文字エンコーディングに従う (UTF-16など)
" 2. UTF-8を規定の文字エンコーディングとする。新規に作成した場合もUTF-8。
" 3. CP51932でデコードを試みる。SS3(補助漢字)を含まないEUC-JPはここに落ちる。
" 4. eucJP-msでデコードを試みる。SS3(補助漢字)を含むEUC-JPはここに落ちる。
" 5. CP932でデコードを試みる。Shift_JISはここに落ちる。
" 6. GB18030でデコードを試みる。GB2312,GBKはここに落ちる。
" 7. UTF-8で開けてもエスケープシーケンスの存在するものはCP50221で開き直す。ISO-2022-JPはここに落ちる。
" 8. CP51932で開いたファイルは保存時の文字エンコーディングをEUC-JPとする。
" 9. CP50221で開いたファイルは保存時の文字エンコーディングをISO-2022-JPとする。
" 10. eucJP-msで開いたファイルは保存時の文字エンコーディングをEUC-JPとする。
" CP932のみ例外とする。狭義のShift_JISが使われる場面はもはやほとんど存在しない。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment