
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で質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MFCのコントロールにUTF-8の文...
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
英数字のみ全角から半角に変換
-
VBA 置換文字がみつからない時
-
IEからEdgeへの移行に伴うIMEの...
-
データにカンマが入ったCSVデー...
-
VBA 文字に半角が含まれて...
-
char型全角数字から、int型半角...
-
SQLのデータで半角カナを全角に...
-
Excel2010 差し込み印刷について
-
Excelについて質問です。 セル...
-
POM
-
Excel VBAでオートシェイプ内の...
-
ASPで全角数字を半角数字にする...
-
csvデータのダブルクォーテーシ...
-
Word2007の全角文字、全角スペ...
-
マクロを使ってフォルダー内に...
-
文字コードの%E3%80%とは何です...
-
エクセルでの”々”の扱い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perl でエラー:Wide character...
-
【文字コード】外見上は全く同...
-
MFCのコントロールにUTF-8の文...
-
UTF-16からUTF-8への変換
-
perlについての質問
-
substrでutf8の日本語文字を先...
-
文字コードについて \\x{53d6}...
-
キーワード抽出がうまくいかない
-
【LaTeX】pBibTeXでのエラーの...
-
CGI.pmで日本語をURLエンコード...
-
デバッグ情報が文字化けする
-
ソース中の文字列と、DBから取...
-
perl 5.6 とperl 5.8 の内部形...
-
JcodeモジュールとEncodeモジュ...
-
Perlで、文字の出現回数を調べ...
-
Jcode.pmでconvertできない
-
EC-CUBEでの文字化け
-
UTF-8のPerlから、UTF-8、EUC、...
-
MT::Mailでメールを送信すると...
-
{ブロック}の外でのみ use ut...
おすすめ情報