ワイド文字のAPI ― 2005年10月24日 19時45分07秒
Perl のドキュメントを調べていると、「Windows プラットホームにおいては, -C コマンドラインスイッチが使われているか, ${^WIDE_SYSTEM_CALLS} グローバルフラグが 1 に設定されているのなら, すべてのシステムコールは対応するワイド文字の API を使います.」と書かれていました。
この機能を Windows で使うと、ワイド文字のAPIが使われるため、ファイル名の処理に直接ワイド文字が使えることになります。
FAT32,NTFS 共 ロングファイル名は Unicode で記録されますから、ANSI 文字でファイルのアクセスをするよりも直接ワイド文字でアクセスする方が安全です。
ANSI文字、日本語の場合 CP932 なら '\' 0x5c がいろいろと厄介な問題*1を起こしますが、ワイド文字で扱うならばそのような厄介な問題は避けられます。
*1 例えば、CP932 の 2バイト目が 0x5c の文字で終わるディレクトリ名の場合、パス区切りと誤認します。
Perl 5.6 以降で有効か?
この機能を Windows で使うと、ワイド文字のAPIが使われるため、ファイル名の処理に直接ワイド文字が使えることになります。
FAT32,NTFS 共 ロングファイル名は Unicode で記録されますから、ANSI 文字でファイルのアクセスをするよりも直接ワイド文字でアクセスする方が安全です。
ANSI文字、日本語の場合 CP932 なら '\' 0x5c がいろいろと厄介な問題*1を起こしますが、ワイド文字で扱うならばそのような厄介な問題は避けられます。
*1 例えば、CP932 の 2バイト目が 0x5c の文字で終わるディレクトリ名の場合、パス区切りと誤認します。
Perl 5.6 以降で有効か?
コメント
トラックバック
このエントリのトラックバックURL: http://namazu.asablo.jp/blog/2005/10/24/118708/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
_ ナマズのブログ - 2005年10月24日 22時30分01秒
Perl + Win32 環境で
${^WIDE_SYSTEM_CALLS} = 1;
とすると、ワイド文字の API (Unicode 版 Win32 API)を使います。
File::Find でも CP932の第二バイトが 0x5c の文字で終わるディレクトリも扱えますし、-
${^WIDE_SYSTEM_CALLS} = 1;
とすると、ワイド文字の API (Unicode 版 Win32 API)を使います。
File::Find でも CP932の第二バイトが 0x5c の文字で終わるディレクトリも扱えますし、-
_ ナマズのブログ - 2005年10月25日 07時25分05秒
perlrun の -C を見ると
(In Perls earlier than 5.8.1 the -C switch was a Win32-only switch that enabled the use of Unicode-aware ``wide system call'' Win32 APIs. This feature was practically unused, however, and the command line switch was the
(In Perls earlier than 5.8.1 the -C switch was a Win32-only switch that enabled the use of Unicode-aware ``wide system call'' Win32 APIs. This feature was practically unused, however, and the command line switch was the
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。