文字列から絵文字だけを削除する実験です(まだ、完全にはうまく削除しきれていないので)。
→ きちんと動くバージョン 文字列から絵文字を削除
CotEditorのScript PackをmacOS 10.13環境にインストールしようとして、Zipアーカイブが展開できないとか、ファイル名に絵文字が入っているためにファイルコピー自体が行えないという現象に直面しました。
macOS 10.14.1で絵文字が70個ほど追加になったという記録があるので、
これらの絵文字ファイル名に用いたファイルをmacOS 10.14.1以降のOS上で作成し、それ以前のバージョンのOSに持って行こうとするとトラブルが発生するのは当然のことでしょう。
ファイル名が原因であることは明らかなので(ふだんはScriptのファイル名に絵文字を使うことはありません)、自動で指定フォルダ以下の書類やフォルダをすべてスキャンして絵文字キャラクターを削除するという処理を書こうとして、その前段階として指定文字列中の絵文字を削除するAppleScriptを書いてみました。
いい感じに削除できていると思えば、削除できない文字もあったりで、まだ完全ではない印象です。p{Emoji_Presentation}で検出しているのですが、検出できない絵文字があるようで、、、、
もともと、NSString上で完結するように処理しようと試みていたものの、matchesInStringで絵文字を検出したあとの消し込みにてこずって、「じゃあ、1文字ずつ分解してチェックルーチンを通せばいいや」と、トーンダウンした経緯があります。
特定の絵文字だけ検出できないというのは納得できません。本Scriptはまだ実戦配備できないレベルだと思います。
下手をすると、全絵文字の全パターンを配列(リスト)に入れておいて、存在確認を行うことになるのかも?
AppleScript名:テキストから絵文字抽出(複数)して削除.scptd |
— – Created by: Takaaki Naganoya – Created on: 2019/11/03 — – Copyright © 2019 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions set a1Str to "where’s 😎the 😎😎emoji 😎?" set b1Str to removeEmoji(a1Str) of me –> "where’s the emoji ?" set a2Str to "2200)🔄❎すべて❌伏せ字に(□に置き換え)" set b2Str to removeEmoji(a2Str) of me –> "2200)すべて伏せ字に(□に置き換え)" set a3Str to "2251)1️⃣2️⃣3️⃣昇順(1–>9)で連番を振る" set b3Str to removeEmoji(a3Str) of me –> "2251)1️⃣2️⃣3️⃣昇順(1–>9)で連番を振る" set a4Str to "2203)🔄❎⚙️🇯🇵簡易日本語形態素解析📚してそれっぽく❌伏せ字に(□に置き換え).scptd" set b4Str to removeEmoji(a4Str) of me –> "2203)⚙️簡易日本語形態素解析してそれっぽく伏せ字に(□に置き換え).scptd" set emojiStr to "😀😃😄😁😆😅😂🤣☺️😊😇🙂🙃😉😌😍🥰😘😗😙😚😋😛😝😜🤪🤨🧐🤓😎🤩🥳😏😒😞😔😟😕🙁☹️😣😖😫😩🥺😢😭😤😡🤬🤯😳🥵🥶😱😨😨😰😥😓🤗🤔🤭🤫🤥😶😐😑😬🙄😯😦😧😮😲😴🤤😪😵🤐🥴🤢🤮🤧😷🤒🤕🤑🤠😈👿👹👺🤡💩👻💀☠️👽👾🤖🎃😺😸😹😻😼😽🙀😿😾🤲👐🙌👏🤝👍👎👊✊🤛🤜🤞✌️🤟🤘👌👈👉👆👇☝️✋🤚🖐🖖👋🤙💪🖕✍️🙏🦶🦵" set eRes to removeEmoji(emojiStr) of me –> "☺️☹️☠️✌️☝️🖐✍️" set emojiStr to "☺️☹️☠️✌️☝️🖐✍️1️⃣2️⃣3️⃣⚙️" set eRes to removeEmoji(emojiStr) of me –> "☺️☹️☠️✌️☝️🖐✍️1️⃣2️⃣3️⃣⚙️" on removeEmoji(aStr) script spdC property outList : {} property cList : {} end script set (cList of spdC) to characters of aStr log (cList of spdC) set (outList of spdC) to {} repeat with i in (cList of spdC) set j to contents of i set eRes to chkEmoji(j) of me if eRes = false then set the end of (outList of spdC) to j end if end repeat return retDelimedText((outList of spdC), "") of me end removeEmoji on chkEmoji(aStr) set aNSString to current application’s NSString’s stringWithString:aStr set aReg to current application’s NSRegularExpression’s regularExpressionWithPattern:"\\p{Emoji_Presentation}" options:0 |error|:(missing value) set cResList to (aReg’s matchesInString:(aNSString) options:0 range:(current application’s NSMakeRange(0, aNSString’s |length|()))) as list if length of cResList = 0 then return false –指定文字列に絵文字が入っていない場合 return true –指定文字列に絵文字が入っている場合 end chkEmoji on retDelimedText(aList, aDelim) set aText to "" set curDelim to AppleScript’s text item delimiters set AppleScript’s text item delimiters to aDelim set aText to aList as text set AppleScript’s text item delimiters to curDelim return aText end retDelimedText |