みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

perlで新規ファイルを作成できない(文字化け)

下記、PERLスクリプトを
Windows 7+ActivePerl + UTF-8記述状態
で使いたいのですが、どうやら、「爱」が正常に変換されず、?という文字が発生しファイルの作成ができないようです。

普通に、Windows 7上で、$titleの爱愛aiをコピーしてファイルの作成はできるので、Perl上でもこの動作を何とか実現させたいのですが、どのようにすればいいでしょうか?
---test.pl(utf8記述)---
use strict;

my $title = "爱愛ai"; # 念のためURLエンコードした物も書いておきます>%E7%88%B1%E6%84%9Bai
use Encode;
Encode::from_to($title, "utf8", "cp932");

open(F,">$title");
print F $title;
close(F);

open(F,">title_test.txt");
print F $title;
close(F);
-------------------------------

投稿日時 - 2013-03-27 18:42:19

QNo.8014488

暇なときに回答ください

質問者が選んだベストアンサー

検索したら、こんなのがありました
http://bokut.in/mt/2012/04/perl-win32-unicode.html

投稿日時 - 2013-03-28 22:26:06

お礼

素晴らしい回答ありがとうございます。
こんなモジュールがあったのですね!



同じ問題にぶち当たった人への参考
因みに、私自身は、他のサブルーチンでmoveを使う必要がありましたので、
こちらもとても役に立ちましたので、一応紹介しておきます。
ファイルのコピーや移動もこれでできるようです
http://search.cpan.org/~xaicron/Win32-Unicode-0.34/lib/Win32/Unicode/File.pm

投稿日時 - 2013-03-29 22:44:03

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

例えば
Encode::from_to($title, "utf8", "cp932");

Encode::from_to($title, "utf8", "cp932", Encode::FB_WARN);
としたらどうなりますか?

投稿日時 - 2013-03-28 00:05:51

お礼

コメントありがとうございます。
下記コードで実行してみました。
-----------------------
use strict;
use warnings;

my $title = "爱愛ai";
use Encode;
# Encode::from_to($title, "utf8", "cp932");
Encode::from_to($title, "utf8", "cp932", Encode::FB_WARN);

open(F,">$title");
close(F);

open(F,">title_test.txt");
print F $title;
close(F);
-----------------------

まず、ファイルは作成されませんでした。
また、title_test.txtファイルについては、中身に何も書かれていませんでした。
また、use warnings;を追加して実行してみたところ(ない場合は、表示なし)
"\x{7231}" does not map to cp932 at C:/Perl64/lib/Encode.pm line 197.
というメッセージが表示されました。

投稿日時 - 2013-03-28 02:41:53

あなたにオススメの質問