
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も見ています
-
見学に行くとしたら【天国】と【地獄】どっち?
みなさんは、一度だけ見学に行けるとしたら【天国】と【地獄】どちらに行きたいですか? 理由も聞きたいです。
-
歳とったな〜〜と思ったことは?
歳とったな〜〜〜、老いたな〜〜と思った具体的な瞬間はありますか?
-
モテ期を経験した方いらっしゃいますか?
一生に一度はモテ期があるといいますが、みなさんどうですか? いまがそう! という方も、「思い返せばこの頃だったなぁ」という方も、よかったら教えて下さい。
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
【お題】斜め上を行くスキー場にありがちなこと
運営も客も一流を通り越して斜め上を行くスキー場にありがちなことを教えて下さい。
-
Malformed UTF-8 character
Perl
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[perl5.8] SJISから読み込んだ~と
-
文字を一文字ずつ区切りたい
-
Perl cgiの文字化けを直したい ...
-
エクセルVBA コードが同じでも...
-
ExcelをCSV書き出す場合のシー...
-
sprintfについて
-
fgets で値が取得できない
-
バッチファイルの作り方(CSV→...
-
VBAでCSVファイルを途中行まで...
-
awkスクリプトでダブルクォーテ...
-
空白文字 \\f と\\v の違いに...
-
Perl 内で実行される Perl が S...
-
perl ファイルが開かない
-
ReadLineでの読み出し行を指定する
-
CSVファイルの内容を編集する方...
-
ファイル出力の改行コードをLFに
-
close()で例外が投げられる理由
-
MATLAB グローバル変数の宣言
-
VBAでCSVファイルの特定行を書...
-
C言語で特定の行を抽出する方法...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perlをwindows環境でshift-jis...
-
Perl UTF8で出力
-
Perl cgiの文字化けを直したい ...
-
文字を一文字ずつ区切りたい
-
does not map to shiftjis は解...
-
vimでのutf8の取扱について
-
perlのmysqlで文字化けをする、...
-
【エラー】Unrecognized character
-
utf-8での日本語正規表現の書き方
-
Perl 正規表現について
-
Perl:Unicodeプロパティ作れない
-
perlでuse utf8でsjisのファイ...
-
Perl utf8上でshiftjisをデコード
-
[Perl]Shift-JISのXMLを解析する場
-
perlで新規ファイルを作成でき...
-
Data::Dumper;でダンプ後表示し...
-
utf-8のCSVをshift_jisに変換し...
-
VBAでCSVファイルを途中行まで...
-
エクセルVBA コードが同じでも...
-
VBAでCSVファイルの特定行を書...
おすすめ情報