みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
Mac(Sierra)でFileMaker Pro Advanced 16 を利用しています。
あるフィールドにメールのソースが格納されており、bodyはISO-2022-JPでエンコードされています。
これをデコードしたいのですが、いい方法はありませんでしょうか?
試したのは、一旦エクスポートによりテキストに書き出し(JISが選べないのでUTF‐8で)→nkf -J でデコード、なのですが、
そもそもテキストファイルがUTF-8のためか、ある程度はデコードされるも文字化けだらけになってしまいます。
AppleScript→do shell scriptを使って文字列をそのままnkfに渡そうとするも、クォートのエスケープなどで上手く行きません。
ご存じの方がいらっしゃいましたら是非ご教示願います。
Offline
手元に環境全然無いので、ふんわり疑問だけ。
> あるフィールドにメールのソースが格納されており、bodyはISO-2022-JPでエンコードされています。
この部分の状況が、よく分かりません。
格納しているのはコンテナフィールドですか?
テキストフィールドなら、FileMakerにインポートした時点で、
内部のエンコードはUTF(内部はUTF-32だっけ?)になってるんじゃないでしょうか。
Offline
>> hondaさん
ありがとうございます。
格納しているのはテキストフィールドです。
メールのBODY部分がISO-2022-JPでエンコードされた状態です。
gmailのAPI叩くとメールのrawデータとしてbase64エンコードされたものが取得できるんですが、
それをデコードすると、アルファベットで構成されるヘッダー以外、特に肝心の本文はISO-2022-JPのままなんです・・・
そのテキストフィールドをコピーして、テキストエディタにペースト、ISO-2022-jpとして保存して、nkf -Jすると、
正常にデコードしてくれます。
Offline
・FM内部処理のデフォルト文字コードは、Unicode(UTF-16)です。
・FMのテキストフィールドで正常に表示できてるなら、その文字コードはUnicodeのはずです。
・データを生のままFM保存したいなら、オブジェクトフィールドに格納します。
・FMテキストフィールドの書き出し方法は何ですか?
・「フィールド内容のエキスポート」は保存データを「生のまま」書き出しできる機能です。
・テキストフィールドを「フィールド内容のエキスポート」すると、文字コードはFMデフォルトのUnicodeとなります。
・nkf --guess でFM出力ファイルの実使用コードを確認されてみては?
Last edited by Hiro (2017-06-13 17:12:32)
Offline
Hiroさん、内部コードありがとうございます。
なんとなく状況が分かった。
多分、FileMakerに格納しているのは、ISO-2022-jpがMIMEエンコードされた結果を、テキストとしてインポートしたものでしょう。
FileMakerにインポートした時点でそのバイト列はUTF-16ですが、MIMEエンコードなので文字化けしてません。
原理的には、そのデータをFileMakerエクスポートし、そのままのバイト列で一旦JISとして保存すれば、
nkfにJISとして渡して正しい結果が得られます。
Offline
>>Hiroさん
ありがとうございます。
レコードのエクスポート、フィールド内容のエクスポートどちらも試したのですが、仰る通り後者はUnicodeとなり、うまく行きませんでした。
(nkf -gでも確認済みです)
しかし先ほど、フィールド内容のエクスポートにて生成したunicodeテキストファイルを一旦nkf -jオプションでiso-2022-jpに変換後、再びnkfで処理したところ、無事デコードが出来ました。
とりあえずこれを軸に進んでいこうと思います。
>>hondaさん
ありがとうございます。おっしゃる通りの状況です。
上記で私が試したのはまさに書いて頂いたとおりの方法ですね。一旦-jでJISとして保存してからであればうまくいきました。
長く愛用していたメール用のプラグイン、MailItがなかなか16に対応せず、いい機会だとおもってプラグインを使わず、FileMakerだけでどうにかしてみよう、という試みでやっています。
(cURLとJSONの練習問題としても面白かったです)
しかしやはりこのデコードの部分でどうしてもFileMaker内だけの解決が難しい事がわかり、素直に別プラグインを入手しようか迷っているところです。。。
Offline
Gmail APIのテスト中でしょうか?
cURLとJSONの採用はFileMakerらしからぬ英断で素晴らしいんですが、
エラー処理のショボさと、文字コードの決め打ち、独自のJSONパス風とかが残念ですね。
相変わらず試してませんが、JSのiconv実装なら可能性あるでしょうか。
■ narirou/jconv: Pure-JavaScript converter for Japanese character encodings.
https://github.com/narirou/jconv
確かこれMIMEにも対応してたので、Webビューアなりで動かせれば、もしかしたら…。
Offline
format=RAW オプションを付けなければ、文字コードを気にすること無くJSONからBodyのテキストが取得できますよ~。
変数を設定 [$payload.body.data; 値: JSONGetElement ( GmailApi::Json_Result ; "payload.body.data" )]
フィールド設定 [GmailApi::Body;
Let(
¢Base64=Substitute ( $payload.body.data ; ["-" ; "+" ] ; ["_" ; "/"] )
;
Base64Decode( ¢Base64 )
)
]
Offline
おお解決。Gmailの名前が出た時点で確認すべきでした。
Offline
>> qb_dpさん
ありがとうございます。
わ!なんという遠回りをしていたのでしょう。。。バッチリですね。解決しました!
確か何かの記事で、全文が取れない、みたいなのを読んだ記憶があったのですが、おそらくsnippetと混同していたのだと思います。
ありがとうございました。
>> hondaさん
ありがとうございます。
結局私の確認不足で最短ルートを見逃していましたが、web viewerを使ってjavascriptで処理する、ってのも面白そうですね!
練習問題としてチャレンジしてみます。
無事解決です。これでメールプラグインとはおさらばできそうです。
ありがとうございましたm(_ _)m
Offline
Pages: 1
[ Generated in 0.209 seconds, 9 queries executed - Memory usage: 528.65 KiB (Peak: 549.55 KiB) ]