Windows perl で日本語パス名を処理するときの不具合対応

      2018/04/13

Windows perl で日本語パス名を処理するときの不具合対応について

スポンサードリンク

Windows activeperl で2バイト文字フォルダ名を処理するとき、不具があります。
原因は2バイト目に [0x5c]が有る日本語フォルダの区切りを間違えるからです。
この結果、[chdir] が、使用出来ません。

フォルダ操作時は必須ですから、致命的な欠陥です。
そこで、win32::api で応急処置をしました。

今までのはどうだったのか?

activeperlの5.16までは[win32-unicode]というモジュールが使えました。
activeperl5.18 位から使えないようになりました。

原因

・Windows は[Windows XP]の頃から、内部コードが[utf16-le] となっていたようです。
・windowsの[dir] なんかは、しっかり対応しているいますね。
・そうなると「ActivePerl が [utf16-le] に対応していないから?」だと思います。

対応

しょうがないので、自前(我流)でモジュールを作りました。
このモジュールは[win32-api」を使ったものです。
[win32-unicode]や海外の情報等を元に、対応モジュールを作りました。。

対応内容

スポンサードリンク

・ディレトリや、ディレトリに関するファイルの入出力は、[activeperl win32::API]を使用。

・[kernel32.dll]の[windows関数]は[ANSI版]ではなくて[Unicode版]を使用する。
で、対応できました。。。
*:但し、専門的な知識が足らないので、完璧では有りません。

このスクリプトを使っての「如何なる損傷・損害等」は、一切保証しません
使用前には、特にデータ等は、「必ずバックアップを取ってから」実行してください。

*スクリプトと説明

・「_func_U_116.read.me」は、作った関数を書いておきました。
・「_func_U_116.pl」は、おおもとのスクリプトです。
・「_func_U_116_dodir.pl」は、「_func_U_116.pl」を使用して、
直下の「ディレクトリとファイル名」をprint out するスクリプトです。
・「_func_U_116_dodir.pl」を起動させると、

「_func_U_116_dodir.txt」という

  ファイルを作成します。
この中に、直下の「ディレクトリとファイル名」をprint out します。

・このスクリプトは「GNU General Public License (GPL) 」および
「Artistic License(アーティスティック・ライセンス)」に従います。

*:誰かもっと完璧なものを、作ってください。。。。。

m(_ _)m:m(_ _)m:m(_ _)m

スクリプト

[ 20170101_funk_U_116.7z]
7zip で圧縮してあります。解凍してください。
20170101_funk_U_116.7z

スポンサードリンク


 - ソフト・プログラム , ,

%d人のブロガーが「いいね」をつけました。