アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記でvimで文字化けをする。
# スパイダリング
use utf8;
use strict;
use LWP::Simple;
use Encode;
use Encoding 'utf-8';
binmode(STDOUT,':utf8');

my $url="https://oshiete.goo.ne.jp/qa/9636983.html";
my $content=get($url);

print $content;

ここで、set enc=utf8とすると、文字化けは直るが。今度は、perlの
ソースが文字化けをする。これの対処は、もうcp932を断念をしての最
初からset encoding=utf-8にする以外の方法は無いのだろうか。

若しも、それをすると今迄の全ての資産が読めなくなる。これを防ぐ手
立てと言うのは無いのだろうか。

質問者からの補足コメント

  • うーん・・・

    要は、set enc=cp932のままで、set fenc=...の値を変更しての
    運用が出来れば良いのですが。それが出来ないと全ての過去の資産が
    全てが文字化けを発生をするためです。

    宜しく、お願いします。

      補足日時:2017/02/16 23:22
  • うーん・・・

    fencとfileencodingsとは違う様です。前者は新規にファイルを作った
    時に指定する文字コードを、後者は、自動判定をする時の文字コードと
    言う事でしょうか。

    私のここでの問題は、特にset enc=と言う事で何も指定をしていないの
    でcp932の文字コードとなっています。perlでutf8を使う時は、use
    utf8でset fenc=utf8で保存をします。

    また、標準出力の時はbinmode STDOUT,':encoding(cp932)'を使ってい
    ます。単に標準出力の時は問題は無いですが。これをリダイレクトする
    時は、ここではutf8で保存をして貰いたいのですがどうしてもcp932で
    変換しようとする。

    今は、仮としてopenでencodingを指定してutf8で書いています。

    リダイレクトで文字コードの指定が出来れば良いですが。

      補足日時:2017/02/17 08:13

A 回答 (3件)

encoding


fileencodeing
fileencodeings
をよく理解されていませんよね(^_^;;

取り敢えず、.vimrc などに
set encoding=utf-8
set fileencodings=iso-2022-jp,cp932,sjis,euc-jp,utf-8
を記述すれば、ファイル・オープン時の文字化けは格段に減ると思います

もしこれで文字化けした場合は、
:set ++enc=〜
で開き直してやればよいです

標準出力を使って、画面に出す時とリダイレクトを使ってファイルに落とす時で文字コードを変えたければ、No.2 の方が仰るように、nkf などとパイプと組み合わせるしか無いと思います

Perl のソースが UTF-8 ばかりなら、次の様に autocmd と組み合わせれば、いつも UTF-8 になります
詳してくはヘルプをご覧ください
augroup VIMRC
autocmd!
autocmd BufEnter *.pl set fileencodeing=utf-8
autocmd FileType perl set fileencodeing=utf-8
augroup END
    • good
    • 0

http://vim-jp.org/vimdoc-ja/
vimのマニュアルです。

http://vim-jp.org/vimdoc-ja/options.html#%27enco …
http://vim-jp.org/vimdoc-ja/options.html#%27file …
http://vim-jp.org/vimdoc-ja/options.html#%27file …
enc,fenc,fencs の違いはこのあたりに。


どうやら
・vimでファイルを開いたり保存したりするときの話

・実行結果をvim(それともコマンドプロンプト?ターミナル?)で表示するときの話
とがあるようですが、それでよろしいでしょうか?


encodingはvim 全体に影響が出るので、vimrcあたりで設定したら、後は基本は変えないとなります。


ファイルの読み書きについては
・ Perlのスクリプト CP932で書かれている
→ fileencodings を適切に設定してあれば、setlocal fileencoding=cp932の状態で開いて、文字化けは起らず、書き出しもcp932で行なわれる。

・ Perlのスクリプト UTF-8で書かれている
→ fileencodings を適切に設定してあれば、setlocal fileencoding=utf8の状態で開いて、文字化けは起らず、書き出しもutf8で行なわれる。

となり、問題無いはずです。
これは、encodingとは関係ありません。

また、実行結果を「 perl 〜.pl > 結果」等とファイルにリダイレクトしたものを、vimで開いたときも同様に、
対応したfencが設定されて、文字化けはしないはずです。


fileencodingsの設定は「vim 文字コード 自動判定」で検索してみましょう。
例えば、検索でトップに来たのはこれです。
http://www.tooyama.org/vim-2.html




画面だろうとリダイレクト先だろうと、「標準出力」は「標準出力」です。
binmode STDOUT,':encoding(cp932)'

binmode STDOUT,':utf8'
にすれば、UTF-8で標準出力されます。
リダイレクトすればUTF-8で保存されます。

画面表示もしたい、そのとき文字化けする、ということなら
・nkf 等にパイプで渡して、画面表示用文字コードに変換する
・perlスクリプト中で、引数や環境変数等を使って判定して、 binmodeの設定を変える
・端末自体をUTF-8にする
等が考えられます。
    • good
    • 0
この回答へのお礼

有難う御座います。

perlとvim都の関係でごちゃごちゃに成って整理が付いていません。
後日、質問を再提出します。

その時は、よろしくお願いします。

お礼日時:2017/02/18 16:26

.vimrcの中で、set fileencodings ってどうなってますか?


設定次第では、ある程度自動判定できるようになります。

やり方、注意事項東は「vim 文字コード 自動判定」で検索してみましょう。


これから作るPerlのスクリプトには、Vim用の設定コメントを入れるのも手です。
「vim モードライン」


あと、setコマンドは全体に影響を与えますから、例のような場合は setlocal (setl) を使うのがよいでしょう。
javascript:void%200;
    • good
    • 0
この回答へのお礼

vimrcでの設定はset fileencodingに付いては何も指定はしていませ
ん。fileencodingと言うのは、省略形でfencでも良いのでしょうか。

set fencが出来るとすれば、複数形が出来るのでしょうか。例えば、
set fenc=cp932,utf-8とか何とか。

済みません。宜しく回答願います。

お礼日時:2017/02/17 07:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!