« [AppleScript]Flash Player をアンインストール | トップページ | [AppleScript]ユニコードエスケープをデコードする【その2:pythonを使う】 »

[AppleScript]ユニコードエスケープをデコードする【その1:phpを使う】

Json等でよく使われるUnicode16進エスケープ形式の文字列を
テキストにデコードします。

こんな流れになります

Website_image20130210_185841


一旦
CharacterEntityへ変換してから
CharacterEntityをテキストに戻します。


(*
サンプルテキスト
君が好き feat.SAKURA,K2C SUNSHINE BAND - ミトカツユキ
*)

set theResultText to "\\u685c\\u821e\\u3044\\u6563\\u308b\\u5b63\\u7bc0\\u306b\\u3000\\u4e8c\\u4eba\\u64ae\\u3063\\u305f\\u5199\\u771f\",\"\\n\\u4eca\\u3082\\u5b9d\\u7269\\u3060\\u3088\\u3000\\u5e78\\u305b\\u3060\\u3063\\u305f\\u304b\\u3089\",\"\\n\",\"\\n\\u4e8c\\u4eba\\u3082\\u3046\\u4e00\\u5ea6\\u3000\\u7d20\\u76f4\\u306b\\u3000\\u4eca\\u3000\\u5bc4\\u308a\\u6dfb\\u3048\\u305f\\u306a\\u3089\",\"\\n\\u306d\\u3048\\u3082\\u3046\\u4e8c\\u5ea6\\u3068\\u96e2\\u308c\\u306a\\u3044\\u3000\\u4eca\\u3082\\u3042\\u306a\\u305f\\u304c\\u597d\\u304d\",\"\\n\",\"\\n\\u6b62\\u307e\\u306a\\u3044\\u96e8\\u306b\\u554f\\u3044\\u304b\\u3051\\u3066\\u3082\",\"\\n\\u3053\\u306e\\u8ddd\\u96e2\\u3000\\u5909\\u308f\\u3089\\u306a\\u3044\\u304b\\u3089\",\"\\n\\u541b\\u304c\\u597d\\u304d\\u3060\\u3068\\u8a00\\u3063\\u3066\",\"\\n\\u3042\\u306a\\u305f\\u306e\\u53e3\\u304b\\u3089\\u8a00\\u3063\\u3066\",\"\\n\\u3082\\u3046\\u8ff7\\u3044\\u306f\\u3057\\u306a\\u3044\\u304b\\u3089\",\"\\n\",\"\\n\\u4e8c\\u4eba\\u3082\\u3046\\u4e00\\u5ea6\\u3000\\u7d20\\u76f4\\u306b\\u3000\\u4eca\\u3000\\u8a31\\u3057\\u3042\\u3048\\u305f\\u306a\\u3089\",\"\\n\\u306f\\u3050\\u3089\\u304b\\u3055\\u305a\\u306b\\u3000\\u3046\\u3051\\u3068\\u3081\\u3066\\u3000\\u4eca\\u3082\\u3042\\u306a\\u305f\\u304c\\u597d\\u304d\",\"\\n\",\"\\n\\u4eca\\u3082\\u541b\\u304c\\u597d\\u304d" as text

--------ダイアログを表示
display dialog "変換するテキストをペースト" default answer theResultText
--------返り値を格納
set theResultText to text returned of the result as text
----------不要な文字を削除 ここはお好みで
set theResultText to my replace(theResultText, ",", "") as text
set theResultText to my replace(theResultText, "\"", "") as text
set theResultText to my replace(theResultText, "(", "") as text
set theResultText to my replace(theResultText, ")", "") as text
set theResultText to my replace(theResultText, ";", "") as text
set theResultText to my replace(theResultText, "[", "") as text
set theResultText to my replace(theResultText, "]", "") as text
set theResultText to my replace(theResultText, "draw", "") as text
set theResultText to my replace(theResultText, "callback", "") as text
----------改行を半角スペースに変換 ここもお好みで
set theResultText to my replace(theResultText, "\\n", "\\u20") as text
set theResultText to my replace(theResultText, "\\ud", "\\u20") as text
----------まずマルチバイトの4桁コードをCharacterEntityに変換
set thePregReplace to "php -r 'echo preg_replace(\"/\\\\\\u([0-9abcdef]{4})/\", \"&#x$1;\", \"" & theResultText & "\");'"
set theResultText to do shell script thePregReplace
----------その後でシングルバイトの2桁コードをCharacterEntityに変換
set thePregReplace to "php -r 'echo preg_replace(\"/\\\\\\u([0-9abcdef]{2})/\", \"&#x$1;\", \"" & theResultText & "\");'"
set theResultText to do shell script thePregReplace
----------デコード本処理
set theMbConvertEncoding to "php -r 'echo mb_convert_encoding(\"" & theResultText & "\", \"UTF-8\", \" HTML-ENTITIES \");'"
set theResultText to do shell script theMbConvertEncoding

----------出来上がりを戻す
display dialog "変換出来ました" default answer theResultText


---------文字の置き換えサブルーチン
to replace(theText, orgStr, newStr)
set oldDelim to AppleScript's text item delimiters
set AppleScript's text item delimiters to orgStr
set tmpList to every text item of theText
set AppleScript's text item delimiters to newStr
set tmpStr to tmpList as text
set AppleScript's text item delimiters to oldDelim
return tmpStr
end replace

「UniEsc2Text.rtf」をダウンロード
「UniEsc2Text.scpt.zip」をダウンロード


|

« [AppleScript]Flash Player をアンインストール | トップページ | [AppleScript]ユニコードエスケープをデコードする【その2:pythonを使う】 »

CharacterEntity」カテゴリの記事

AppleScriptCharacter」カテゴリの記事