Skip to main content
Inspiring
April 22, 2024
Answered

Illustratorのスクリプトで、アラートに出る、配列に追加した日本語が文字化けします。

  • April 22, 2024
  • 2 replies
  • 1270 views

お世話になります。
Illustratorのスクリプトを作成しているのですが、アラートに出る、配列に追加した日本語が文字化けしてしまいます。
定型句は文字化けしないのですが、何が原因として考えられるでしょうか。
ご存知の方、ぜひお知恵をお貸しください。

作業環境:
Illustrator2020(日本語版)
MacOS10.14.6


---問題のスクリプト------------------------

var nonMatchingFiles = []; // 条件を満たさないファイル名を格納する配列
〜〜〜

// 条件を満たさない場合、ファイル名を配列に追加
nonMatchingFiles.push(placedItem.file.name);

〜〜〜

// 条件を満たさないファイル名が格納された配列を確認して、空でなければアラートで表示
if (nonMatchingFiles.length > 0) {
alert("条件を満たさないファイル: \n" + nonMatchingFiles.join("\n"));
   return; // 処理を終了
}

------------------------------------------

試したこと
●UTF-8 のBOMなしBOM付きで保存しなおし
●別のテキストエディタを使ってスクリプトを開き、UTF-8で再保存
●JavaScriptでの文字コード変換の試み
function escapeFileName(fileName) {
return unescape(encodeURIComponent(fileName));
}
var fileNameEscaped = escapeFileName(placedItem.file.name);

 

This topic has been closed for replies.
Correct answer ajabon grinsmith

fullNameプロパティでできたと思ったのですが、今日動かしたら、当たり前ですがパスまで表示されました。何が起きてたのかちょっとわかりませんが、教えてくださった、decodeURIを使用したいと思います。


ん、fullNameはフルパスが返りますよ。それで正常です。

そこから正規表現で切り出す方法というのもあります。

file.fullName.replace(/^.+\/(?=[^\/]+$)/, "")

などでも。

2 replies

Omachi
Legend
April 22, 2024

placedItem.fileプロパティはExtendScriptのFileオブジェクトを返します。

ですからFileオブジェクトのプロパティを調べればよいのです。

 

nameプロパティはURI表記のファイル名を返しますので、表示には適しません。

displayNameプロパティかfsNameプロパティであれば日本語がその通り取得できますので、単純にファイル名だけであればdisplayNameプロパティ、ファイルパス名も含めたければfsNameプロパティを使用してください。

ajabon grinsmith
Community Expert
Community Expert
April 22, 2024

いまはMacでCatalina以降だとExtendScriotToolKitを使えないのでExtendScriptのDOMを調べるのにひと苦労なんですよね…

外部サイトですがこのあたり参考になりますね

 

ajabon grinsmith
Community Expert
Community Expert
April 22, 2024

手元環境(macOS11.7.10)でファイル名「13_日本語1.ai」を配置して名前を取ってみたところ、

結果が異なりました。これは見慣れたやつですね。

 

これはdecodeURIで変換できました。

 

ご提示のスクショと比較すると、「%25」に違和感があるということで…

%25って「%」なんですね。

 

なので、コード全体を見ないと直接の原因はちょっとわかりませんが、

decodeURI() の二重がけで応急回避できるかと思います。

Inspiring
April 22, 2024

できました!ありがとうございます。根本的な解決が大事ではありますが、ひとまずこれで対応していきたいと思いまあす。