パスワードを忘れた? アカウント作成
10787868 journal
日記

numaの日記: Windows・Perl・UTF-16三題噺 2

日記 by numa

WindowsでPerlを使ってUnicode処理(1)~(7)」という題名の雑文を公開いたしました。興味がおありでしたら、ご笑覧いただければと存じます。

といっても、「UTF-16は面倒くさい」・「Windowsは奇奇怪怪だ」としか書いていないようなものでありまして、前者は最初から想像していたとおり、後者は、ハードリンクがファイル属性を共有してなかったり、パイプがシークできたりするOSに、いまさら何を期待していたのか、という話ではございますが。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by emk (30939) on 2014年03月25日 20時52分 (#2569158) 日記

    http://blog.livedoor.jp/numa2666/archives/52344853.html [livedoor.jp]
    > Mac OSはNFD、WindowsはNFC。
    Mac OSのファイル名は互換漢字を分解しない独自の正規化形式です。Windowsのファイル名に正規化の概念はありません。たまたま合成済み文字で入力されることが多くてそれを素通ししているだけです。
    この文脈でのNFD/NFCは「漢字イン」とか「サニタイズ」とか「DNS浸透」並みのNGワードなのでご注意。Unicode::NormalizeではなくEncode::UTF8Macを使いましょう。

    http://blog.livedoor.jp/numa2666/archives/52344855.html [livedoor.jp]
    世の中にはJPerlをこきおろしつつ(しかも「国際化に対応できない」とかなんとかもっともらしい理屈をつけて)、openに渡すファイル名の変換はcp932決め打ちとかいうちょっと意味のわからない「モダンPerl流」の紹介文書があふれているので、Encode::Localeが出てきて安心しました。
    まあANSI CPにない文字を含むファイル名を扱うならWin32::UnicodeかWin32::LongPathを使うかWin32::APIでゴリゴリやるしかないんですが。

    http://blog.livedoor.jp/numa2666/archives/52344856.html [livedoor.jp]
    C++ならGetCommandLineWとCommanLineToArgvWでUnicodeのコマンドラインを直接取得できます。PerlモジュールではWin32::Unicode::NativeにUnicodeコマンドライン取得の機能があります。あるのはいいのですが、このモジュール他にも副作用がいろいろあるのが困ります。ほしいのはコマンドライン取得の機能だけなのに。なにかいい方法はないでしょうか(なぜか逆質問)。

typodupeerror

あと、僕は馬鹿なことをするのは嫌いですよ (わざとやるとき以外は)。-- Larry Wall

読み込み中...