タイトルそのままのスクリプトをChatGPTに作成してもらいました。
役に立つかは、あなた次第!
字形パレットや字形検索は使いにくい
Narrow No-Break Space を「字形の検索」で表示すると、「U+0020」(通常の半角スペース)になります。
本来は「U+202F」ですが、このような特殊なスペースなど文字コードの一部は「字形の検索」ではわかりませんし、字形パレットも使い勝手が悪いです。
↓
↓スクリプトを実行した結果
選択した文字すべての文字コードを表示します。下記は表の1文字だけの列を選択しているので、結果はこのようになります。
↓
混乱しがちな文字列のUnicodeを表示させると、こんな感じ。
どこかで誰かの役に立つかもしれない、スクリプトでした。
スクリプトコード
/*==========================================================
Indesign上で文字コードを確認するスクリプト
(テキスト範囲の全ての文字が対象)
===========================================================*/
(function () {
if (app.documents.length === 0) {
alert("ドキュメントを開いてください。");
return;
}
var sel = app.selection[0];
if (!sel || !(sel.hasOwnProperty("characters") || sel.constructor.name === "InsertionPoint")) {
alert("テキストを選択してください。");
return;
}
var chars;
if (sel.hasOwnProperty("characters") && sel.characters.length > 0) {
chars = sel.characters;
} else if (sel.constructor.name === "InsertionPoint" && sel.parentStory.characters.length > 0) {
chars = sel.parentStory.characters;
} else {
alert("有効なテキストを選択してください。");
return;
}
var unicodeNames = {
0x2002: "EN SPACE",
0x2003: "EM SPACE",
0x2005: "1/4 SPACE",
0x2009: "THIN SPACE",
0x200A: "HAIR SPACE",
0x200B: "ZERO WIDTH SPACE",
0x200D: "ZERO WIDTH JOINER",
0x202F: "NARROW NO-BREAK SPACE",
0x2060: "WORD JOINER",
0x2010: "HYPHEN",
0x2011: "NON-BREAKING HYPHEN",
0x2012: "FIGURE DASH",
0x2013: "EN DASH",
0x2014: "EM DASH",
0x2015: "HORIZONTAL BAR",
0x00A0: "NO-BREAK SPACE",
0x3000: "IDEOGRAPHIC SPACE"
};
var result = "";
for (var i = 0; i < chars.length; i++) {
var c = chars[i];
var ch, code;
try {
ch = c.texts[0].contents;
if (!ch || ch.length === 0) {
result += "(空の文字)\r";
continue;
}
code = ch.charCodeAt(0);
} catch (e) {
result += "(取得エラー)\r";
continue;
}
if (isNaN(code)) {
result += "(不明な文字)\r";
continue;
}
var shown;
if (ch === " ") {
shown = "(スペース)";
} else if (code < 32) {
shown = "(制御文字)";
} else {
shown = "\"" + ch + "\"";
}
var hex = code.toString(16).toUpperCase();
while (hex.length < 4) hex = "0" + hex;
var uniStr = "U+" + hex;
var name = unicodeNames[code] ? " (" + unicodeNames[code] + ")" : "";
result += shown + " → " + uniStr + name + "\r";
}
var w = new Window("dialog", "Unicode確認");
w.orientation = "column";
w.alignChildren = ["fill", "top"];
var text = w.add("edittext", undefined, result, {
multiline: true,
readonly: true,
scrolling: true
});
text.preferredSize = [500, 300];
w.add("button", undefined, "閉じる", { name: "ok" });
w.show();
})();
スペースは表示ができないのと、ダッシュ類は区別がつきにくいので、コードネームが付くようになっています。
ほかの文字にもコードネームを付けたいところではありますが、ChatGPTと紆余曲折した結果です。
コード見てわかる方は適当にアレンジしてくださいね。