文字列データのhexdumpを表示させようとして、予期しない結果が返ってきたので原因を追求してみました。
問題の発生源はNSDataのdescriptionを取得した箇所。
--> "<e38182e3 8184e381 86e38188 e3818a>"--macOS 10.14.6 --> "{length = 15, bytes = 0xe38182e38184e38186e38188e3818a}"--macOS 10.15.7 --> "{length = 15, bytes = 0xe38182e38184e38186e38188e3818a}"--macOS 11.4
macOS 10.15で、この結果を返すさいの記述が変更になったようです。descriptionからhex値を取得するのは、たしかに「裏技」っぽい解決策。
データが長くなると、
{length = 60, bytes = 0xe38182e3 8184e381 86e38188 e3818ae3 ... 81a4e381 a6e381a8 }
のように途中が省略されるので、データを小分けにして処理する必要があります。
AppleScript名:dataのdescription.scptd |
— – Created by: Takaaki Naganoya – Created on: 2021/05/20 — – Copyright © 2021 Piyomaru Software, All Rights Reserved — – Don’t remove this header!!! use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions set aStr to current application’s NSString’s stringWithString:"あいうえお" set aDat to aStr’s dataUsingEncoding:(current application’s NSUTF8StringEncoding) set bStr to aDat’s |description|() as string –> "<e38182e3 8184e381 86e38188 e3818a>"–macOS 10.14.6 –> "{length = 15, bytes = 0xe38182e38184e38186e38188e3818a}"–macOS 10.15.7 –> "{length = 15, bytes = 0xe38182e38184e38186e38188e3818a}"–macOS 11.x |
Shane Stanleyからメールで「debugDescriptionだと従来のdescriptionと同じ結果が得られるよ」と教えてもらいました(Thanks Shane!)。
AppleScript名:hexdumpTest.scptd |
–By Shane Stanley 2021/05/21 use AppleScript version "2.7" use framework "Foundation" use scripting additions set a to "あいうえおかきくけこさしすせそたちつてと" set aStr to current application’s NSString’s stringWithString:a set aDat to aStr’s dataUsingEncoding:(current application’s NSUTF8StringEncoding) set bStr to aDat’s |debugDescription|() as string –> <e38182e3 8184e381 86e38188 e3818ae3 818be381 8de3818f e38191e3 8193e381 95e38197 e38199e3 819be381 9de3819f e381a1e3 81a4e381 a6e381a8> |