0

文字化け encodingとfileencodingsの設定

zshのキーバインドをvi風にしたいなと考えて.zshrcを開いたときに問題が発生してしまった。

なんか文字化けしてる・・・なぜ?

`.zshcr`
        1 #^[$B%*%W%7%g%s^[(B
        2 setopt auto_cd
        3 setopt auto_pushd
        4
        5 #^[$BJd40^[(B
        6 #for-zsh-completions
        7 fpath=(/usr/local/share/zsh-completions $fpath)
        8
        9 #^[$BJd405!G=$rM-8z$K$9$k^[(B
        10 autoload -Uz compinit
        11 compinit -u
        12 #^[$BJd40^[(B ^[$B%a%K%e!<$NA*Br%b!<%I^[(B
        13 zstyle ':completion:*:default' menu select=2
         14
        15 #^[$BJ8;z$N6h@Z$j@_Dj^[(B
        16 autoload -Uz select-word-style
        17 select-word-style default
        18 zstyle ':zle:*' word-chars "/=;@;{}.|"
        19 zstyle ':zle:*' word-style unspecified
        20
        21 #^[$BBgJ8;z$H>.J8;z$r6hJL$7$J$$^[(B
        22 zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'

とりあえず.vimrcの設定を見直すことに

`.vimrc`
   :set encoding=utf-8
   :set fileencodings=utf-8,iso-2022-jp,euc-jp,sjis

vimの文字コード設定に知っている文字列をつっこんでいただけなので、どうやらこのような問題が起きたみたいです。

調べてみると encodingはvimの内部で使用する文字コードだそうです。 またfileencodingsをしなかった場合自動的にこのencodingにしていした文字列で開かれるそうです。

fileecodingsが自動判別の設定です。

記述された順番に対象ファイルを開いてうまくいった文字コードを採用するそうです。

しかし!ここで注意があるみたいです。asciiの文字列は大抵の文字コードにマッチしてしまうみたいなので

1.fileecodingsの最初に書かれた文字コードが採用されてしまう。

2.encodingに指定された文字を見つけたら即採用

とうことです。

つまり僕の設定はutf-8でしか開かない!!というとんだ設定をしていたみたいです。

というわけで設定を直しました。

`.vimrc`
    ;set encoding=utf-8
    :set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8

これで無事

`.zshcr`
        1 #オプション
        2 setopt auto_cd
        3 setopt auto_pushd
        4
        5 #補完
        6 #for-zsh-completions
        7 fpath=(/usr/local/share/zsh-completions $fpath)
        8
        9 #補完機能を有効にする
        10 autoload -Uz compinit
        11 compinit -u
        12 #補完 メニューの選択モード
        13 zstyle ':completion:*:default' menu select=2
         14
        15 #文字の区切り設定
        16 autoload -Uz select-word-style
        17 select-word-style default
        18 zstyle ':zle:*' word-chars "/=;@;{}.|"
        19 zstyle ':zle:*' word-style unspecified
        20
        21 #大文字と小文字を区別しない
        22 zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'

正しい文字コードで開けるようになりました。

ちなみにfile -I .zshrcで文字コードを調べてみたらなぜかus-asciiになっていました。

ascii系ということは大体の文字コードが成功になってしまうのでeuc-jpとか先に書いてしまったら文字化けしてしまいますね。ascii系のファイルを読める形で開くには互換性のあるiso-2022を前に持ってこなければなりませんね。

試しにeuc-jpを前に記述したらまた文字化けしました・・・

今回のことで文字コードに興味がもてたので少しづつ勉強しようかなと思いました。スクリプト言語のこともあるので。


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí