こんにちは、お力を貸して下さい。
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.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 にはなってるんですかね…
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 置換方法の方がいまのところの解決策なんでしょうね~;;
お探しの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.plのconvertを使用しなけ...
-
常用漢字?でない文字を判定す...
-
パイソンエラーについて
-
pythonエラー
-
全角入力
-
GoogleAppsScript文字列置換の...
-
全角/半角キーをSendkeys関数で...
-
住宅にカナを入力する際に丁目...
-
CSVファイルの中で、「 , 」カ...
-
VBA EXCEL あるセルの中の一...
-
バッチファイルの正規表現を利...
-
マクロを使ってフォルダー内に...
-
メールのcsv添付ファイルの種類...
-
正しいメールアドレスの形式で...
-
プログラミングでは、半角括弧...
-
VBAの文字列の中に”(全角のダブ...
-
エクセルの区切り位置の設定方法
-
C#で空白行を削除する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
InputMan の imTextについて
-
戻り値の意味がわかりません…
-
文字化けを元に戻せますか?
-
正規表現でカンマを対象にする方法
-
utf-8のマシンでsjisのデータフ...
-
unicodeの表示
-
ダブルクォート文字などをフォ...
-
チェックボックスの複数選択の...
-
jcodeを使ったgetcode
-
jcodeでsjisに変換できない
-
特殊文字をPOSTした際の動作は?
-
テキストエリアに半角「\\」ま...
-
文字化けの事で?
-
機種依存文字の文字コード変換
-
jcode.plについて
-
文字実体参照が勝手に変換され...
-
「数値文字参照への変換するソ...
-
nkfとjcodeの使い方の違いについて
-
半角と全角の文字数カウント方法
-
常用漢字?でない文字を判定す...
おすすめ情報