終了

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

Community Beginner ,
Jan 16, 2025 Jan 16, 2025

リンクをクリップボードにコピー

コピー完了

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

replaceで、「°」から「°」に変換したいのですが、いい方法があれば教えてください。
よろしくお願いします。
キーワード
スクリプティング

表示

158

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines

correct answers 2 件の正解

Community Expert , Jan 16, 2025 Jan 16, 2025

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

たとえば…

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

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

app.changeGrep()

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

投票

翻訳

翻訳
Community Expert , Jan 16, 2025 Jan 16, 2025

SpecialCharacters.DEGREE_SYMBOL ですね。

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

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

 

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

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

 

というのは、

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

スクリーンショット 2025-01-17 11.17.49.png

 

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

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

スクリーンショット 2025-01-17 11.17.43.png

 

ちなみに

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

 

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

 

スクリーンショット 2025-01-17 11.18.10.png

投票

翻訳

翻訳
Community Expert ,
Jan 16, 2025 Jan 16, 2025

リンクをクリップボードにコピー

コピー完了

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

たとえば…

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

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

app.changeGrep()

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

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Jan 16, 2025 Jan 16, 2025

リンクをクリップボードにコピー

コピー完了

SpecialCharacters.DEGREE_SYMBOL ですね。

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

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

 

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

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

 

というのは、

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

スクリーンショット 2025-01-17 11.17.49.png

 

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

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

スクリーンショット 2025-01-17 11.17.43.png

 

ちなみに

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

 

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

 

スクリーンショット 2025-01-17 11.18.10.png

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Jan 16, 2025 Jan 16, 2025

リンクをクリップボードにコピー

コピー完了

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

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

for (i = 0; 〜){

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

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
参加者 ,
Jan 22, 2025 Jan 22, 2025

リンクをクリップボードにコピー

コピー完了

最新

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

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines