こんにちは、お力を貸して下さい。
OSX上で日本語のファイル名を取得し
そのファイル名をeucに変換しようとすると
半濁音付きのカナが文字化けを起こしてしまうのです。
Web上で
“$euc = Jcode($euc, 'utf8')->z2h->h2z->euc;”
で、できないこともないみたいだったので、さっそくやってみたんですが…
変換したいファイル名は、「1ドキュメント」とします。
--------------------------------------
#!/usr/bin/perl
use strict;
use Jcode;
my $path = "パスがはいっている";
my @files;
opendir DIR, $path;
@files = grep /^1/ && -f "$path/$_", readdir(DIR);
closedir DIR;
foreach (@files) {
my $euc = $_;
$euc = Jcode->new($euc, 'utf8')->z2h->h2z->euc;
print "$euc\n";
}
exit;
--------------------------------------
結果:1ト〓キュメント
やっぱり文字化けしましたTT
新しい解決法がありましたら、よろしくお願いします。
No.2ベストアンサー
- 回答日時:
おおざっぱに言えば、Mac OS Xのファイル名の扱いでは、濁点が1文字として扱われてます。
正確なところは、Apple TILをご覧下さい。
macosx-jp MLで、これに対応したモジュールが話題にのぼってたのですが、ソースを置いてあるというURLは切れてました。googleで検索かけたら、rubyでも同様なモジュールあるみたいです。
w3m-m17だとちゃんと変換してくれるみたいなので、これをフィルタにするという手も。
手っ取り早くやろうと思ったら、Jcode.pmを派生させて、eucに変換したあと、s/ト〓/ド/gってのを化けそうな文字分列挙して無理矢理直しちゃうメソッドを定義しちゃうとか。
参考URL:http://developer.apple.com/ja/qa/qa2001/qa1173.h …
お力、ありがとうございます!
そうなんですよね、どうして濁点を1文字にしてしまったのか…
私も調べて見たのですが、Ruby というのはオブジェクト指向言語なんですね。このRuby がPerl 内で動くのであれば、初めて聞く名前なのでいろいろ調べてからやってみたいと思います。
やはり、s 置換方法の方がいまのところの解決策なんでしょうね~;;
No.1
- 回答日時:
手元の環境 (Jcode v0.83)で同様の現象が再現しないのですが、
まず Jcode のバージョンはいくつでしょうか。
あと、データが正しいかどうかを見たいのですが、
とりあえず
foreach (@files) {
my $euc = $_;
# 追加
print join " ", map{ sprintf '%02X', ord $_ } split //, $euc;
$euc = Jcode->new($euc, 'utf8')->z2h->h2z->euc;
# 追加
print join " ", map{ sprintf '%02X', ord $_ } split //, $euc;
print "$euc\n";
}
こうして、$euc の中身を hexdump してみたら、原因がある程度解明できるかもしれません。
そうした場合のデータを開示していただけますか。
お力、ありがとうございます!
Jcode なんですが、Jcode.pm をインストールしています。バージョンは…2.10 になるのかな?
さっそく、追加して実行してみました。
結果、変換前のコードは、
31 E3 83 88 E3 82 99 E3 82 AD E3 83 A5 E3 83 A1 E3 83 B3 E3 83 88
変換後のコードは、
31 A5 C8 A2 AE A5 AD A5 E5 A5 E1 A5 F3 A5 C8
でした。
一応、euc にはなってるんですかね…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- その他(プログラミング・Web制作) 文字コード及びフォントに関する次の記述を読み,適切なものをすべて選べ。 ASCIIとは,英数字だけを 4 2023/01/11 19:10
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- PostgreSQL PostgressからMySQL(MariaDB)へ構造を変更する際のTimestamp等について 2 2023/04/04 12:09
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- その他(プログラミング・Web制作) sedの動作 2 2022/10/10 13:38
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字化けを元に戻せますか?
-
デコード処理について
-
Jcode を使った複数選択値の文...
-
機種依存文字の文字コード変換
-
正規表現 URL抽出「 [\\/\\b]{0...
-
CSVファイルの中で、「 , 」カ...
-
Excel VBAでPDFファイルをMicro...
-
IEからEdgeへの移行に伴うIMEの...
-
英数字のみ全角から半角に変換
-
EXCELからCSVにすると余計なカ...
-
エクセルで数値を全角文字(カ...
-
文字コードの%E3%80%とは何です...
-
CString Format にて全角空白文...
-
VBA 文字に半角が含まれて...
-
VBScript文字列をSJISからUTF8...
-
perl 初めてのプログラムにエラ...
-
「何とかで始まり、何とかで終...
-
カンマ区切り
-
Accessのテキストボックスの入...
-
LaTeXで半角カンマと全角カンマ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
InputMan の imTextについて
-
戻り値の意味がわかりません…
-
正規表現でカンマを対象にする方法
-
文字化けを元に戻せますか?
-
unicodeの表示
-
utf-8のマシンでsjisのデータフ...
-
ダブルクォート文字などをフォ...
-
チェックボックスの複数選択の...
-
jcodeを使ったgetcode
-
jcodeでsjisに変換できない
-
機種依存文字の文字コード変換
-
文字化けの事で?
-
特殊文字をPOSTした際の動作は?
-
テキストエリアに半角「\\」ま...
-
jcode.plについて
-
「数値文字参照への変換するソ...
-
文字実体参照が勝手に変換され...
-
常用漢字?でない文字を判定す...
-
Jcode を使った複数選択値の文...
-
Jcode.pmでの半角カナ→全角カナ...
おすすめ情報