• ベストアンサー

perlで変換時に十申曾箪貼等がもじばけ

データ管理の為perlで データの保存先のパスを \から/に変換させる事をしたいのですが、パスの途中、ファイル名に 十 申 曾 箪 貼 能 表 等の文字が入ると 文字が化けてしまいます。いろいろ調べて化ける理由は分ったのですが、やりたい事が出来ません。対応できる方法があれば教えてください。 文字コードはSHIFT-JISです 例:c:\申請表\能力検定\貼付け\十分.txt を c:/申請表/能力検定/貼付け/十分.txt に変換したいがどうしても以下の様になってしまう。 c:/・請・・力検定/・付け/・分.txt 

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

  • ベストアンサー
  • kumoz
  • ベストアンサー率64% (120/185)
回答No.3

外から変数に代入して、その変数を処理する方法があると思います。次のコードは、先頭から1文字ずつ見ていきながら、全角文字に含まれない \ だけを変換しています。 use strict; my $path = <DATA>; chomp $path; $path .= '#'; while ($path !~ /^#/) { unless ($path =~ s/^([\x81-\x9F\xE0-\xEF][\x40-\xFC])(.*)/$2$1/) { $path =~ s/^\\/\//; $path =~ s/^(.)(.*)/$2$1/; } } $path =~ s/^#//; print "$path\n"; __DATA__ c:\申請表\能力検定\貼付け\十分.txt

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

今の Perl なら UTF-8 経由の方が安全かもしれない... が, Unicode と shift_jis の間だと変換に問題がありえるので微妙?

回答No.1

SHIFT-JIS(SJIS)だと全角文字中に\にあたる文字コードが混在することがあるので 一旦文字コードをEUCに変換してから、\→/ の変換をしてから、SJISに戻すとよいかと。

関連するQ&A