
perlをwindows環境でshift-jisのテキストファイルを読み込み、読み込んだファイルをutf-8でファイルを書き込み(改行コードはLF)をする方法がわかりません。
サンプルプログラムを示してもらえると助かります。
書き込みを”binmode STDOUT, ":utf8";”にするだけでは、下記のようなエラーがでました。エラーの意味が良くわかりませんでした。わかれば教えてください。
Malformed UTF-8 character (unexpected continuation byte 0x82, with no preceding
start byte) at utf.pl line 7.
No.3ベストアンサー
- 回答日時:
質問文に「binmode STDOUT, ":utf8";」と書いておられるので、リダイレクトを使用するのかなと想像しました。
<utf.pl>
use open IN => ":encoding(cp932)";
binmode STDOUT, ":raw:utf8";
print <>;
コマンドラインから以下のように打てば所望の結果が得られるのではと思います。
C:\>perl utf.pl sjis.txt >utf8.txt
>No.2さんへ
open時に、:rawを入れればbinmodeを省略できると思います。
open my $in, "<:encoding(cp932)", "sjis.txt";
open my $out, ">:raw:utf8", "utf8.txt";
print {$out} <$in>;
close $in
close $out;
No.2
- 回答日時:
open でエンコードを指定すれば良いかと。
------------------------------------------------------
use Encode;
open(IN, "<:encoding(sjis)", "sjis.txt") or die "Can't open sjis.txt.";
open(OUT, ">:utf8", "utf8.txt") or die "Can't open utf8.txt.";
binmode(OUT); # 改行をLFのみにする為
while (my $line = <IN>) {
print OUT encode('utf8', $line); # encode は utf8 フラグを外すため
}
close(OUT);
close(IN);
------------------------------------------------------
print OUT encode('utf8', $line);
は
print OUT $line;
としても動作しますが、警告が出ます。
改行コードの変更がなければ、binmode(OUT) も encode('utf8', ・・・) も要らないのですが・・・。
> Malformed UTF-8 character ・・・
スクリプト内にUTF-8として正しくない文字が有るというエラーです。
「use utf8;」を宣言しているにもかかわらず、UTF-8以外の文字コード(Shift_JIS等)でスクリプト自体が記述されている場合などに出ます。
スクリプト自体はUTF-8で書くのが無難です。
参考URL:http://www.rwds.net/kuroita/program/Perl_unicode …
No.1
- 回答日時:
use Jcode;
$str="シフトJIS文字列";
&Jcode::convert(\$str, 'utf-8');
printf("%s\n", $str);
ありがとうございます。下記のようにするとできました。
できれば、Jcodeは速度が遅いイメージを持っているので使用したくないので、別の方法を教えていただければと思います。
use Jcode;
$str="シフトJIS文字列";
&Jcode::convert(\$str, 'utf-8');
my $file = "temp.txt";
open $fh, '>', $file or die "Cannot open '$file': $!";
binmode $fh;
print $fh $str."\n";
print $fh $str."\n";
close $fh;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- その他(プログラミング・Web制作) Sikulix2.0.5(Jython2.7.3)でcsvを読込WEB検索条件にpasteで文字化け 1 2023/03/31 11:02
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- Perl Perlで特定文字列から特定文字列までを抜き出したい 4 2022/04/02 14:24
- Windows 10 Windows Updateが動作しません 7 2022/08/12 16:26
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- C言語・C++・C# pythonで外部のファイルを読み込む際のエラー 2 2022/04/12 19:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
does not map to shiftjis は解...
-
ファイル出力をUTF8Nではなくて...
-
perlをwindows環境でshift-jis...
-
perl5.8.3のunicode環境で日本...
-
Perl出力をUTF-8に指定する方法
-
大量メールの任意のヘッダだけ...
-
シェルスクリプトによる計算
-
文字化け
-
正規表現で " ← を削除する...
-
perlのDigest::MD5;でのMD5算出...
-
MATLAB グローバル変数の宣言
-
excel 2003から VBAのreplaceマ...
-
シェル(ksh)でテキスト文書を変換
-
携帯でのカウンタ
-
携帯のWEBサイトでファイル...
-
標準入出力 パイプ
-
極めて初歩的な質問ですみません
-
flockについて
-
ファイルのアップロード
-
パーミッションについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perl cgiの文字化けを直したい ...
-
【エラー】Unrecognized character
-
Perl UTF8で出力
-
perlでuse utf8でsjisのファイ...
-
perlの自作ライブラリについて
-
Perl:Unicodeプロパティ作れない
-
perlのmysqlで文字化けをする、...
-
does not map to shiftjis は解...
-
sedの動作
-
Perlを用いて、XMLファイルの中...
-
消費税の計算で 税込価格から...
-
Perl utf8上でshiftjisをデコード
-
perlのLWP::Simpleでgrepの値が...
-
perlで新規ファイルを作成でき...
-
utf-8のCSVをshift_jisに変換し...
-
Perlでのファイル出力における...
-
HTTP::Request::Common qw(POST...
-
[Perl]Shift-JISのXMLを解析する場
-
[perl5.8] utf8で文字出力する...
-
ファイル出力をUTF8Nではなくて...
おすすめ情報