タグ:日本語
ZIPファイル解凍時の「文字化け」と対処法 (Linuxにて)

PCでいろんな作業をしていると、「文字化け」という現象に出くわす時がたまにある。これは、日本語の入力システムの多様さに由来している。

 

まだ、いまのように、Windowsがなかった時代、MS-DOSというオペレーティングシステムが全盛だったころ、日本語の文字入力は、マイクロソフトのDOSでは、shift-JIS、NECのPC9801系列ではJIS、UnixではEUCというまったく別な文字コードが使われていた。

 

また、デリミタ(Delimiter)とよばれた区切りコードも、キャリッジリターン[CR] 、ラインフィード[LF]、あるいは、キャリッジリターン+ラインフィード[CR+LF]というように、何種類かあった。実は、これらの間を互いに変換してくれるフリーソフトウェアも存在した。私もよく利用させていただいた記憶がある。

 

Windowsが全盛となった現在、これらのことはほとんど意識しなくても済むようになった。なぜならば、システムが自動的に変換してくれて、これらの違いを吸収してくれるからである。

 

私のように、Linuxを使っていても、このあたりは、あまり意識していない。ただ、「文字化け」は時々起こる。特に、Windowsで作成したファイルがWindowsで圧縮された場合、このZIPファイルをLinuxで解凍しようとすると、文字化けとなる。この問題は、長い間、悩みの種であった。(私の場合は、Dual BootのPCを使っているので、いったんWindowsを起動し、解凍した後に、Linuxを起動して読み込む、といった操作をしていた。)

 

だが、昨年、ひとつのスクリプトを見つけた。このスクリプトは、たったひとつの点をのぞいてすばらしいものであった。一年ほど使ってみて、使い慣れたものなので、ここに紹介させていただこうとおもう。(*)

 

========== (ここから) ==========

#!/usr/bin/perl

use Archive::Zip;

use Encode;

 

my $zip = Archive::Zip->new($ARGV[0]) or die;

for ($zip->members) {

$zip->extractMember($_, encode('UTF-8', decode('CP932', $_->fileName)));

}

========== (ここまで) ==========

 

この部分を例えば、「xunzip.pl」などのファイル名で保存し、

 

chmod 755 xunzip.pl

 

などで、
実行可能にしておく。そして、

 

./xunzip.pl sample.zip

 

のように使用する。

 

これは、Perl(パール)スクリプトとよばれるもので、perl-Archive-Zipというパッケージが必要となる。あらかじめ、インストールしておく。

 

私には、理解不足の点もあるが、Windowsで使用されているCP932という文字コードを、Linuxで使用されているUTF-8に変換するものである。とても便利なスクリプトなのである。

 

ただ、ひとつ、欠点は、パスワードがZIPファイルにかけられていると、使えないということ。なにか、やりかたはあるのだろうが、いまのところ、不明のままにしておいてある。

 

(2011-8-15)

 

 

(*) Nikkei Linux雑誌2010年9月号のp.50にサンプルとして掲載されていたものを引用させていただきました。

 

 

使っていますか? 2GBまで無料の「Dropbox」

 

 

あなたのお持ちの独自ドメイン、全て利用できます!

  • 体験
高校「世界史」の授業

これまで、いろいろな方々から教えをいただいているが、昔の高校時代に教えていただいた忘れられないユニークなひとりの先生の想い出を記してみようとおもう。

 

K先生は、世界史の授業を担当されていた。世界史の授業はいろんな国や地域の名称、人物の名などを年代とともに覚えなければならないのだが、リズム感をもって覚えることを生徒たち(つまり、我々)に教えていた。例えば、早口で、

 

「いんしゅうしゅんじゅうせんごくじだいしんぜんかんしんごかん、ぎしんなんぽくちょうじだいずいとう、ごだいじゅっこくそうきんなんそうげんみんしん」(殷・周・春秋戦国時代・秦・前漢・新・後漢・魏晋南北朝時代・隋・唐・五代十国・宋・金・南宋・元・明・清) (注1)

 

あるいは、これも早口で、

 

「せいそしんえんかんぎちょう」(斉・楚・晋・燕・韓・魏・趙) (注2)

 

と暗唱する。いまだに、この記憶は鮮明であり、そのユニークな授業の想い出とともに脳裏に焼き付いている。

 

また、あるとき、たまたま、ローマ帝国の興亡史を世界史の授業でやっていたときのことであった。K先生はちょうど、中劇(上越市にある映画館の名)に「ベン・ハー」という映画がきているから(上映中だから)と観ることを勧められた。

 

当時、映画館へいくことなどはめったになかったことであった。が、学校の先生の勧めということもあって親の許可をもらって見にいったのである。「ベン・ハー」はとても鮮烈で衝撃的なものであった。英語版で日本語の字幕を見ながら、そして、すばらしい音楽を聴きながら鑑賞したのであった。ローマ帝国にキリスト教が広まる前夜のストーリーだったと記憶している。

 

社会科の世界史をユニークな方法で教えていただいたK先生に感謝している。ちなみに、このことも影響したのか、自分の大学受験のときの社会科試験科目は世界史を選択したのであった。

 

(2009-2-21)

 

 

(注1) 中国歴代王朝の順序、

 

(注2) 春秋戦国時代の王朝名

 

記憶を確認するために、次のURLを参照した。

 

■ 中国古代王朝 (http://www5.airnet.ne.jp/tomy/koten/jidai.htm)

 

 

 

 

 

 

 

あなたも世界史のクイズに挑戦してみませんか? ちょっとした空き時間にできる世界史のクイズアプリです。長大な世界の歴史を、簡単な四択の問題形式でレビューしてみましょう。試験に役立つかも。

 

 

 

特に、殷・周・春秋戦国時代・秦・前漢・新・後漢・魏晋南北朝時代・隋・唐・五代十国・宋・金・南宋・元・明・清といった中国の歴史は、またおもしろいものです。これも四択の問題形式でクイズにしてみました。気軽に挑戦してみましょう。

 

 

(2020-7-7 追記)

 

 

 

 

 

  • 体験
「最後だとわかっていたなら」

衝撃的な内容の詩を目にした。ふだんの、ごくあたりまえの幸せな毎日が、明日も続くとは限らない。この詩を読んで、衝撃を受けるとともに日常の生活について、考えさせられてしまった。

 

2001年9月11日の同時多発テロの追悼集会やテレビなどで朗読されたという。この詩は、アメリカのノーマ・コーネット・マレックさんという女性の方が、わが子を亡くした時に書いた詩だそうだが。みなさんはどのように感じられるのだろうか。

 

詩は、If I knew it would be the last time (最後だとわかっていたなら)... から始まる。

 

全文は、次のサイトなどに掲載されている。

 

(英語) Tomorrow Never Comes (written by Norma Cornett Marek)

 

あるいは

 

(日本語) 最後だとわかっていたなら

 

(2009-2-7)

 

 

===================================

以下は引用

===================================
(英語) Tomorrow Never Comes (written by Norma Cornett Marek)

 

Tomorrow Never Comes

written by Norma Cornett Marek in 1989

Printed with permission.

 

If I knew it would be the last time

that I'd see you fall asleep,

I would tuck you in more tightly

and pray the Lord, your soul to keep.

 

If I knew it would be the last time

that I see you walk out the door,

I would give you a hug and kiss

and call you back for one more.

 

If I knew it would be the last time

I'd hear your voice lifted up in praise,

I would videotape each action and word,

so I could play them back day after day.

 

If I knew it would be the last time,

I would spare an extra minute or two

to stop and say"I love you,"

instead of assuming you would know I do.

 

If I knew it would be the last time

I would be there to share your day,

Well I'm sure you'll have so many more,

so I can let just this one slip away.

 

For surely there's always tomorrow

to make up for an oversight,

and we always get a second chance

to make everything right.

 

There will always be another day

to say"I love you,"

and certainly there's another chance

to say our"Anything I can do's?"

 

But just in case I might be wrong,

and today is all I get,

I'd like to say how much I love you

and I hope we never forget,

tomorrow is not promised to anyone,

young or old alike.

And today may be the last chance you get

to hold your loved one tight.

 

So if you're waiting for tomorrow,

why not do it today?

For if tomorrow never comes,

you'll surely regret the day

that you didn't take that extra time

for a smile, a hug, or a kiss,

and you were too busy to grant someone,

what turned out to be their one last wish.

 

So hold your loved ones close today,

whisper in their ear,

tell them how much you love them

and that you'll always hold them dear.

 

Take time to say"I'm sorry,"

"please forgive me,""thank you," or"it's okay."

And if tomorrow never comes,

you'll have no regrets about today.

 

===================================

 

 

 

(日本語) 最後だとわかっていたなら

 

「最後だとわかっていたなら」

ノーマ コーネット マレック作

佐川睦訳

 

あなたが眠りにつくのを見るのが

最後だとわかっていたら

わたしは もっとちゃんとカバーをかけて

神様にその魂を守ってくださるように

祈っただろう

 

あなたがドアを出て行くのを見るのが

最後だとわかっていたら

わたしは あなたを抱きしめてキスをして

そしてまたもう一度呼び寄せて

抱きしめただろう

 

あなたが喜びに満ちた声をあげるのを聞くのが

最後だとわかっていたら

わたしは その一部始終をビデオにとって

毎日繰り返し見ただろう

 

あなたは言わなくても

わかってくれたかもしれないけれど

最後だとわかっていたら

一言でもいい・・・「あなたを愛してる」と

わたしは 伝えただろう

 

たしかにいつも明日はやってくる

でももしそれがわたしの勘違いで

今日ですべてが終わるのだとしたら

わたしは今日

どんなにあなたを愛しているか 伝えたい

 

そして わたしたちは 忘れないようにしたい

 

若い人にも 年老いた人にも

明日は誰にも約束されていないのだということを

愛する人を抱きしめられるのは

今日が最後になるかもしれないことを

 

明日が来るのを待っているなら

今日でもいいはず

もし明日が来ないとしたら

あなたは今日を後悔するだろうから

 

微笑みや 抱擁や キスをするための

ほんのちょっとの時間を

どうして惜しんだのかと

忙しさを理由に

その人の最後の願いとなってしまったことを

どうして してあげられなかったのかと

 

だから 今日

あなたの大切な人たちを

しっかりと抱きしめよう

そして その人を愛していること

いつでも

いつまでも大切な存在だと言うことを

そっと伝えよう

 

「ごめんね」や「許してね」や

「ありがとう」や「気にしないで」を

伝える時を持とう

そうすれば もし明日が来ないとしても

あなたは今日を後悔しないだろうから

===================================