下記で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にする以外の方法は無いのだろうか。
若しも、それをすると今迄の全ての資産が読めなくなる。これを防ぐ手
立てと言うのは無いのだろうか。
No.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
No.2ベストアンサー
- 回答日時:
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にする
等が考えられます。
有難う御座います。
perlとvim都の関係でごちゃごちゃに成って整理が付いていません。
後日、質問を再提出します。
その時は、よろしくお願いします。
No.1
- 回答日時:
.vimrcの中で、set fileencodings ってどうなってますか?
設定次第では、ある程度自動判定できるようになります。
やり方、注意事項東は「vim 文字コード 自動判定」で検索してみましょう。
これから作るPerlのスクリプトには、Vim用の設定コメントを入れるのも手です。
「vim モードライン」
あと、setコマンドは全体に影響を与えますから、例のような場合は setlocal (setl) を使うのがよいでしょう。
javascript:void%200;
vimrcでの設定はset fileencodingに付いては何も指定はしていませ
ん。fileencodingと言うのは、省略形でfencでも良いのでしょうか。
set fencが出来るとすれば、複数形が出来るのでしょうか。例えば、
set fenc=cp932,utf-8とか何とか。
済みません。宜しく回答願います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ソフトウェア) powershell で出力したテキストファイルをvim で開くと文字化け 2 2023/01/11 21:39
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- WordPress(ワードプレス) ワードプレスのエラー ログイン画面が表示できない 1 2022/11/05 09:51
- PHP php エラー 2 2022/10/23 16:43
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- Perl Perlのエラーについてご教授ください。初心者です。 CGIを別サーバに移したところ、Perlのバー 5 2023/05/31 10:48
- TOEFL・TOEIC・英語検定 英語 文法 1 2023/02/27 14:01
- HTML・CSS <meta charset="utf-8"><!-- 文字化け防止ユニコード --> ?最近モバイル 1 2022/12/11 04:27
- PHP phpのメールフォームの完了画面でメール受信のコードを書いています。 1 2023/05/31 11:39
- YouTube youtubeからの著作権メールについて 2 2023/02/14 16:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル出力をUTF8Nではなくて...
-
文字を一文字ずつ区切りたい
-
Perl cgiの文字化けを直したい ...
-
[Perl]Shift-JISのXMLを解析する場
-
Perl UTF8で出力
-
HTTP::Request::Common qw(POST...
-
perlでuse utf8でsjisのファイ...
-
VBAでCSVファイルを途中行まで...
-
openした後、closeしないでプロ...
-
VBAでCSVファイルの特定行を書...
-
エクセルVBA コードが同じでも...
-
awkスクリプトでダブルクォーテ...
-
バッチファイルの作り方(CSV→...
-
csvファイルの横方向への改行に...
-
ExcelをCSV書き出す場合のシー...
-
drtファイルはどうしたら開...
-
無料配布の郵便番号自動入力cgi...
-
ファイルからある文字列の個数...
-
close()で例外が投げられる理由
-
Perlで フォルダ内の全て...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perl cgiの文字化けを直したい ...
-
HTTP::Request::Common qw(POST...
-
utf-8のCSVをshift_jisに変換し...
-
perlのmysqlで文字化けをする、...
-
文字を一文字ずつ区切りたい
-
[Perl]Shift-JISのXMLを解析する場
-
ファイル出力をUTF8Nではなくて...
-
Perl utf8上でshiftjisをデコード
-
DBIモジュールと Perl5.8
-
does not map to shiftjis は解...
-
perlでuse utf8でsjisのファイ...
-
消費税の計算で 税込価格から...
-
Data::Dumper;でダンプ後表示し...
-
Perl UTF8で出力
-
perlをwindows環境でshift-jis...
-
バッチファイルの作り方(CSV→...
-
awkスクリプトでダブルクォーテ...
-
VBAでCSVファイルの特定行を書...
-
DOSコマンドで、標準出力を出力...
-
ExcelをCSV書き出す場合のシー...
おすすめ情報
要は、set enc=cp932のままで、set fenc=...の値を変更しての
運用が出来れば良いのですが。それが出来ないと全ての過去の資産が
全てが文字化けを発生をするためです。
宜しく、お願いします。
fencとfileencodingsとは違う様です。前者は新規にファイルを作った
時に指定する文字コードを、後者は、自動判定をする時の文字コードと
言う事でしょうか。
私のここでの問題は、特にset enc=と言う事で何も指定をしていないの
でcp932の文字コードとなっています。perlでutf8を使う時は、use
utf8でset fenc=utf8で保存をします。
また、標準出力の時はbinmode STDOUT,':encoding(cp932)'を使ってい
ます。単に標準出力の時は問題は無いですが。これをリダイレクトする
時は、ここではutf8で保存をして貰いたいのですがどうしてもcp932で
変換しようとする。
今は、仮としてopenでencodingを指定してutf8で書いています。
リダイレクトで文字コードの指定が出来れば良いですが。