アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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
    • good
    • 0

今の Perl なら UTF-8 経由の方が安全かもしれない... が, Unicode と shift_jis の間だと変換に問

題がありえるので微妙?
    • good
    • 0

SHIFT-JIS(SJIS)だと全角文字中に\にあたる文字コードが混在することがあるので


一旦文字コードをEUCに変換してから、\→/ の変換をしてから、SJISに戻すとよいかと。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!