Skip to main content
Inspiring
1月 17, 2025 1:20 午前 UTC
解決済み

Javascript でテキストフレームの文字を「.contents」で取得したとき "DEGREE_SYMBOL" となる文字

InDesign2021のJavascriptで、テキストフレームの文字列から「.contents」を使用して「°」を取得した時に、文字として認識してくれず、「DEGREE_SYMBOL」となってしまいます。

replaceで、「°」から「°」に変換したいのですが、いい方法があれば教えてください。
よろしくお願いします。
ajabon grinsmith
Community Expert
1月 17, 2025 2:27 午前 UTC

SpecialCharacters.DEGREE_SYMBOL ですね。

それなりのやりかたもありますが、今回はコードポイントを利用したほうがかんたんかと思います。

コードポイントは文字を選択して情報パネル上で参照できます。

 

>テキストフレームの文字列から「.contents」を使用して「°」を取得

について、どんな感じのコードを運用しているか、見せてもらえますか?

 

というのは、

1文字だけとらえた場合はアイツが返るのですが、

 

2文字以上の文字列の場合、下記スクショのようになる(面倒なく取得できる)など、

ちょっと運用から見直したほうがよい可能性もあるためです。

 

ちなみに

スクリプト内で検索置換機能を使う場合はこんなかんじで取得できます。

 

app.findGrepPreferences.findWhat = "\\x{00B0}";
var myFind = app.activeDocument.findGrep();
if(myFind.length){
    myFind[0].showText();
}

 

返信数 4

yuki-metal作成者
Inspiring
1月 17, 2025 2:50 午前 UTC

皆様ありがとうございます。

仕様上、文字列を1文字ずつ取得しなければならず、皆様のお力をお借りいたしました。

for (i = 0; 〜){

 charItem_contents = textFrame.contents.charAt(i);
}
で文字として1文字ずつ取得できました。
ありがとうございました。
翻訳
kawamoto_α
Inspiring
1月 23, 2025 6:25 午前 UTC

完成したスクリプトで「𠮷田くんは90°です」と書かれたテキストフレームが正しく処理できますか?
できなかったらサロゲートペアでググってみてください

翻訳
ajabon grinsmith
Community Expert
Community Expert
1月 17, 2025 2:27 午前 UTC

SpecialCharacters.DEGREE_SYMBOL ですね。

それなりのやりかたもありますが、今回はコードポイントを利用したほうがかんたんかと思います。

コードポイントは文字を選択して情報パネル上で参照できます。

 

>テキストフレームの文字列から「.contents」を使用して「°」を取得

について、どんな感じのコードを運用しているか、見せてもらえますか?

 

というのは、

1文字だけとらえた場合はアイツが返るのですが、

 

2文字以上の文字列の場合、下記スクショのようになる(面倒なく取得できる)など、

ちょっと運用から見直したほうがよい可能性もあるためです。

 

ちなみに

スクリプト内で検索置換機能を使う場合はこんなかんじで取得できます。

 

app.findGrepPreferences.findWhat = "\\x{00B0}";
var myFind = app.activeDocument.findGrep();
if(myFind.length){
    myFind[0].showText();
}

 

翻訳
Ten A
Community Expert
Community Expert
1月 17, 2025 2:15 午前 UTC

degree_signはスペシャルキャラクター扱いなのでenumでアクセスするって面倒な子なんですけど、単純に検索置換したいだけなら検索条件プロパティに現物を突っ込めばOKです。

たとえば…

app.findGrepPreferences.findWhat = "°";
app.changeGrepPreferences.changeTo = "°";

 このようなコードで検索置換ダイアログボックスに放り込めます。あとは

app.changeGrep()

メソッドで置換すればOKです。

翻訳