Skip to main content
Participating Frequently
January 17, 2025
Answered

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

  • January 17, 2025
  • 3 replies
  • 400 views

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

replaceで、「°」から「°」に変換したいのですが、いい方法があれば教えてください。
よろしくお願いします。
Correct answer ajabon grinsmith

SpecialCharacters.DEGREE_SYMBOL ですね。

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

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

 

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

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

 

というのは、

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

 

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

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

 

ちなみに

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

 

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

 

3 replies

Participating Frequently
January 17, 2025

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

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

for (i = 0; 〜){

 charItem_contents = textFrame.contents.charAt(i);
}
で文字として1文字ずつ取得できました。
ありがとうございました。
kawamoto_α
Participating Frequently
January 23, 2025

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

ajabon grinsmith
Community Expert
ajabon grinsmithCommunity ExpertCorrect answer
Community Expert
January 17, 2025

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
January 17, 2025

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

たとえば…

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

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

app.changeGrep()

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