Perl初心者です。
perlで簡単なソフトを作り、時々変化する情報をテキストファイルから読み込むようにしています。
昔は、Shift-jisでしたが、文字化け対策が嫌になり、UTF-8に統一しました。
皆様は、何を使われていますでしょうか?
また、読み込みや出力には、そのファイルの文字コード指定していますか?
質問させていただいた動機について(無駄に長いです)
最近パソコン初心者の友達へ、プログラムを作ってあげたのですが、どうもうまく動かない。
設定ファイルに書いてある内容が何か合わないようです。
色々試行錯誤して、3日ほど悩んだ結果、相手のパソコンで編集(Vista)すると、BOMというものが付くことが分かり、とりあえず、それを削除することで無事動作致しました。
UTF-8であれば、文字コードなど気にせず万能だと思っていたのですが、これだけ悩まされると、UTF-8以外の方にもっと良い方法があるのではないかと思い質問させていただきました。
No.4ベストアンサー
- 回答日時:
Windowsでは歴史的要因からShift_JISと思われていますが、WindowsXP(2000)以降は、UTF8を内部的に使用しています。
しかし、Perlは、しばしば古いUNIX上で動かす可能性もあるため、EUCで様々な処理を行い、必要に応じて入出力の段階で変換しています。基本的にEUCでは文字化けが起こりにくいことと、豊富な歴史的産物が使えるからです。
★Perl正規表現雑技 ( http://www.din.or.jp/~ohzaki/regex.htm )
★Perlメモ ( http://www.din.or.jp/~ohzaki/perl.htm )
また、テキストエディタですが、さすがにメモ帳は勧めていません。
・元に戻る回数が限定されている。
・改行コードの違い,タブ,全角と半角の文字の区別が付かない
・検索・置換が、不便
・正規表現が使えない
・様々な文字コードを扱えない
そのため、特に初心者には「テキストエディタ EmEditor - EmEditor Free ( http://jp.emeditor.com/modules/download2/rewrite … )」などの高機能テキストエディタを勧めています。初心者には必需品です。リンク先の下のほうにfree版へのリンクがあります。
当然、UTFであってもBOMをつけないで保存できます。
No.5
- 回答日時:
#2 です。
すいません、ちょっと勘違いをして、#2では読込むテキストではなく、Perlスクリプト自体の文字コードのつもりで書いてました。
> また、文字コードについて実は、まだあまり理解できていないのですが、PERLでスクリプトを書く場合、
> use utf8;
> は付けずに書いております。これは、書いた方が良い物でしょうか?
他の方も指摘されている通り、スクリプト自体をutf8で書く場合でなければ、付けてはいけません。詳細は#2に書いたサイトを見て下さい。
が、スクリプト自体をutf8で書き、 use utf8; を付けて、内部表現と入出力のエンコードを意識しつつ処理するが無難だと思います。
No.3
- 回答日時:
個人的には「文字化け」は無視しているし (<ぉぃ) 日本語と英語が使えれば (少なくとも当面は) 十分なので, 「Unicode にする」モチベーションがないんですよね.... ということで, Windows では主に shift-jis. Unix とかを考えてもむしろ ISO-2022-JP.
perl における utf8 プラグマは「スクリプトが UTF-8 で書かれている」, つまり識別子や文字列定数 (正規表現を含む) が UTF-8 で書かれていることを示すためにあり, またそれ以外の目的で (ってなんだろう) use してはならないということになっています. だから識別子や文字列定数が ASCII に含まれる文字のみであれば utf8 を use する必要はありません. 特に, 「読み込むテキストの文字コード」とは無関係です.
あと, Windows で UTF-8 なテキストに対し BOM をつける件ですが, これについては個人的には Microsoft を非難する気にはなれないです. そもそも (日本の) Windows では shift-jis が使われていたわけですから「何らかの方法で UTF-8 なテキストを区別したい」というのは自然な考え方ですし, そのような状況下で UTF-8 なテキストに (Unicode で書かれていることを示すマークとして) BOM をつけることは Unicode Consortium でも認められています. 実際, FAQ にも「プレーンテキストであることは分かっているが符号化方法が不明なときには BOM を使うことができる」と書かれています.
この質問の文章だけでは正確なところが分からないんだけど, ひょっとするとあなたの作ったプログラムの方で「BOM のついた UTF-8 な設定ファイル」を許してあげる方がいいのかもしれません. 特に, Windows 環境で動かすプログラムであれば
・BOM があれば UTF-8
・なければ shift-jis
と解釈するのがよいのかも.
No.2
- 回答日時:
以前は EUC_JPで書くことが多く、状況によって Shift_JIS だったりしましたが、Perl5.8 以降は「use utf8;」を付けて UTF-8 で書くことがほとんどですね。
Perl5.8 以降は文字列の扱いが変わって内部ではUTF-8として扱うことになっているので、UTF-8で書くのが無難だと思いますよ。
http://hikoboshi.org/perl/utf8.html
http://www.rwds.net/kuroita/program/Perl_unicode …
上記のサイトに有るとおり、入出力時には内部表現、つまりutf8フラグ付きのUTF-8文字列との変換を行なうのがセオリーだと思います。
それから、BOMに関してですが、本来UTF-8にBOMは不要なので、マイクロソフト系のソフトウェアでUTF-8のBOMが必須となっているのは、そちらの方が問題ですね・・・。
http://ja.wikipedia.org/wiki/UTF-8#.E3.83.90.E3. …
回答いただきありがとうございます。
UTF-8で良いのですね。安心しました。
また、文字コードについて実は、まだあまり理解できていないのですが、PERLでスクリプトを書く場合、
use utf8;
は付けずに書いております。これは、書いた方が良い物でしょうか?
とりあえず、不具合無く動いて居るように見えています。
BOMについて、Wikipediaへのリンクありがとうございます。よく使うOSはWindowsが多く、WindowsではBOMが無い場合動かないこともあるのですね。とても勉強になりました。
しかし、UTF-8でややこしいことが無くなったという印象を持っていたのですが、なかなかうまくいかない物ですね。
No.1
- 回答日時:
UTF-8
>色々試行錯誤して、3日ほど悩んだ結果、相手のパソコンで編集(Vista)すると、BOMというものが付くことが分かり、
メモ帳を使わなければいいのでは?
回答いただきありがとうございます。
それはそうなのですが、パソコン初心者(Wordとメモ帳の違いが分からない)の方に、手軽に編集して貰うには、拡張子を.txtにしてメモ帳で編集できるようにするのが最も負担が少なく、これ以外の手段がないところなのです。
また、ややこしい問題は、UTF-8なら全て解決していたと思っていたのですが、思わぬ落とし穴があったという気がしています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- その他(ソフトウェア) powershell で出力したテキストファイルをvim で開くと文字化け 2 2023/01/11 21:39
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- その他(プログラミング・Web制作) Sikulix2.0.5(Jython2.7.3)でcsvを読込WEB検索条件にpasteで文字化け 1 2023/03/31 11:02
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perl でエラー:Wide character...
-
【LaTeX】pBibTeXでのエラーの...
-
カタカナ一覧表が知りたい
-
PerlでRSS取得 ~ 文字化け ~ ...
-
sedやperlでの2バイト文字を含...
-
Perlで、文字の出現回数を調べ...
-
CSVファイルの中で、「 , 」カ...
-
全角英数字の必要性が理解できない
-
英数字のみ全角から半角に変換
-
マクロを使ってフォルダー内に...
-
IEからEdgeへの移行に伴うIMEの...
-
エクセルで数値を全角文字(カ...
-
CString から LPCTSTRの型に変換
-
Excel VBAでPDFファイルをMicro...
-
WORDで改ページすると時々グレ...
-
EXCELからCSVにすると余計なカ...
-
「何とかで始まり、何とかで終...
-
VBA 文字に半角が含まれて...
-
VB.net、テキストボックス入力...
-
VBA 置換文字がみつからない時
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perl でエラー:Wide character...
-
【LaTeX】pBibTeXでのエラーの...
-
【文字コード】外見上は全く同...
-
MFCのコントロールにUTF-8の文...
-
perlについての質問
-
sedやperlでの2バイト文字を含...
-
WindowsでUTF-8のPerlスクリプ...
-
HTML::Templateでutf-8のテンプ...
-
Java+MySQLで特殊文字(丸数字(...
-
UTF-8のPerlから、UTF-8、EUC、...
-
jcode.plのかわり
-
Perlで、文字の出現回数を調べ...
-
CGIでメール送信で件名文字化け
-
perlで読み込むテキストの文字...
-
Jcodeによるカタカナ→ひらがな変換
-
UTF-16からUTF-8への変換
-
printfの書式指定での2バイト文...
-
PIC16F84AのBlank Checkは
-
JcodeモジュールとEncodeモジュ...
-
カタカナ一覧表が知りたい
おすすめ情報