perl5.8でファイルを読み込む場合、文字コードを意識した以下のような呼び方("<:euc-jp")があるのですが
この方法で読み込んだ$datの中身はperlの内部コード(UTF8)になっているということでしょうか?
それとも、普通に("<")で読み込んで$dat = Encode::decode("euc-jp", $dat);とすべきでしょうか?
use utf8;
use Encode;
my $fname = "test.txt"; # 文字コードがEUC-JP
my $dat = "";
open(IN, "<:euc-jp", "$fname) or die "open error!";
flock(IN, 2);
while(<IN>){
$dat .= $_;
}
close(IN);
No.1ベストアンサー
- 回答日時:
open の第二引数でエンコーディング指定をしたときとか、Encode::decodeを使って変換した場合は、
変換結果の文字列はUTF-8はUTF-8なのですが「UTF-8フラグ」というものが
ついたものになっています。
その意味においては、質問にあるどちらのやり方でも結果は同じです。
速度も多分優位な差は出ないような気がしますが測定しないと断言はできません。
処理対象のテキストファイルのエンコーディングがあらかじめわかっているとか、
決めうちしてよいのなら open でいいでしょうし、そうではなくていくつかのエンコーディングが混在するのなら、
別途対象のエンコーディングを判定した上で読みながら変換という二番目の手段をとればよいと思います。
> while(<IN>){
> $dat .= $_;
> }
こういう読み方はよくありません。
メモリも時間も無駄遣いしていまいます。
File::Slurp というモジュールをインストールして
$dat = read_file($filename);
とするか、モジュールを入れるのがいやなら、
open(IN, "<:euc-jp", "$fname) or die "open error!";
flock(IN, 2);
{local $/ = undef; $dat = <IN>}
close(IN)
のようにすれば一気読みができます。
ところで
> open(IN, "<:euc-jp", "$fname) or die "open error!";
この第二引数でエンコーディングしているのに :euc-jp って書き方許されてましたっけ?
:utf8 という指定はありますが、エンコーディングを指定するときは
:encoding(euc-jp) のように指定する必要があったと記憶しています。
Perl 5.8.x Unicode関連
http://www.rwds.net/kuroita/program/Perl_unicode …
Perl 5.8.x における日本語コード変換のメモ
http://www.hikoboshi.org/perl/doc/encode.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby パイソンでテキストファイルが読み込めない 1 2022/11/14 16:42
- その他(プログラミング・Web制作) 文字コード及びフォントに関する次の記述を読み,適切なものをすべて選べ。 ASCIIとは,英数字だけを 4 2023/01/11 19:10
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- その他(プログラミング・Web制作) Pythonを勉強しています。 5 2023/08/25 09:51
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- その他(プログラミング・Web制作) pandasでまとめてインデックスを削除するにはどうすればいいですか? たとえば、以下のプログラムで 1 2022/07/31 23:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perl utf8上でshiftjisをデコード
-
文字列をカウントする方法
-
ファイル全てを .xlsm に変更し...
-
一定時間が経過したフォルダの削除
-
csvファイルの横方向への改行に...
-
while(<ハンドラ>) {} で行数を...
-
画像アップロード機能を追加し...
-
batファイルでrenameができませ...
-
while文がうまく動かない
-
VBAでCSVファイルの特定行を書...
-
MATLABのm-fileについて
-
配列のサイズを動的に拡張
-
ディレクトリのファイル作成を...
-
ANSI Cでファイル名、ディレク...
-
VB6.0でDB接続する際に切断時の...
-
Pythonの再帰関数の動作の流れ...
-
AutoCADのスクリプト
-
C++でファイルから複数行のデー...
-
オープンしたファイルで行の連結
-
Perlで特定行から特定行までを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perl cgiの文字化けを直したい ...
-
HTTP::Request::Common qw(POST...
-
utf-8のCSVをshift_jisに変換し...
-
ファイル出力をUTF8Nではなくて...
-
[Perl]Shift-JISのXMLを解析する場
-
perlのmysqlで文字化けをする、...
-
文字を一文字ずつ区切りたい
-
perlでuse utf8でsjisのファイ...
-
Perl utf8上でshiftjisをデコード
-
does not map to shiftjis は解...
-
DBIモジュールと Perl5.8
-
消費税の計算で 税込価格から...
-
Data::Dumper;でダンプ後表示し...
-
Perl UTF8で出力
-
perlをwindows環境でshift-jis...
-
バッチファイルの作り方(CSV→...
-
awkスクリプトでダブルクォーテ...
-
VBAでCSVファイルの特定行を書...
-
DOSコマンドで、標準出力を出力...
-
ExcelをCSV書き出す場合のシー...
おすすめ情報