初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2017-06-13 11:05:06

JL999
Member

ISO-2022-JPをデコードするには?

Mac(Sierra)でFileMaker Pro Advanced 16 を利用しています。
あるフィールドにメールのソースが格納されており、bodyはISO-2022-JPでエンコードされています。
これをデコードしたいのですが、いい方法はありませんでしょうか?

試したのは、一旦エクスポートによりテキストに書き出し(JISが選べないのでUTF‐8で)→nkf -J でデコード、なのですが、
そもそもテキストファイルがUTF-8のためか、ある程度はデコードされるも文字化けだらけになってしまいます。

AppleScript→do shell scriptを使って文字列をそのままnkfに渡そうとするも、クォートのエスケープなどで上手く行きません。

ご存じの方がいらっしゃいましたら是非ご教示願います。

Offline

#2 2017-06-13 12:24:42

honda
Member

Re: ISO-2022-JPをデコードするには?

手元に環境全然無いので、ふんわり疑問だけ。

> あるフィールドにメールのソースが格納されており、bodyはISO-2022-JPでエンコードされています。
この部分の状況が、よく分かりません。

格納しているのはコンテナフィールドですか?
テキストフィールドなら、FileMakerにインポートした時点で、
内部のエンコードはUTF(内部はUTF-32だっけ?)になってるんじゃないでしょうか。

Offline

#3 2017-06-13 13:53:55

JL999
Member

Re: ISO-2022-JPをデコードするには?

>> hondaさん
ありがとうございます。
格納しているのはテキストフィールドです。
メールのBODY部分がISO-2022-JPでエンコードされた状態です。
gmailのAPI叩くとメールのrawデータとしてbase64エンコードされたものが取得できるんですが、
それをデコードすると、アルファベットで構成されるヘッダー以外、特に肝心の本文はISO-2022-JPのままなんです・・・

そのテキストフィールドをコピーして、テキストエディタにペースト、ISO-2022-jpとして保存して、nkf -Jすると、
正常にデコードしてくれます。

Offline

#4 2017-06-13 15:54:10

Hiro
Member

Re: ISO-2022-JPをデコードするには?

・FM内部処理のデフォルト文字コードは、Unicode(UTF-16)です。
・FMのテキストフィールドで正常に表示できてるなら、その文字コードはUnicodeのはずです。
・データを生のままFM保存したいなら、オブジェクトフィールドに格納します。
・FMテキストフィールドの書き出し方法は何ですか?
・「フィールド内容のエキスポート」は保存データを「生のまま」書き出しできる機能です。
・テキストフィールドを「フィールド内容のエキスポート」すると、文字コードはFMデフォルトのUnicodeとなります。
・nkf --guess でFM出力ファイルの実使用コードを確認されてみては?

Last edited by Hiro (2017-06-13 17:12:32)

Offline

#5 2017-06-13 17:21:02

honda
Member

Re: ISO-2022-JPをデコードするには?

Hiroさん、内部コードありがとうございます。

なんとなく状況が分かった。
多分、FileMakerに格納しているのは、ISO-2022-jpがMIMEエンコードされた結果を、テキストとしてインポートしたものでしょう。
FileMakerにインポートした時点でそのバイト列はUTF-16ですが、MIMEエンコードなので文字化けしてません。
原理的には、そのデータをFileMakerエクスポートし、そのままのバイト列で一旦JISとして保存すれば、
nkfにJISとして渡して正しい結果が得られます。

Offline

#6 2017-06-13 18:15:16

JL999
Member

Re: ISO-2022-JPをデコードするには?

>>Hiroさん
ありがとうございます。
レコードのエクスポート、フィールド内容のエクスポートどちらも試したのですが、仰る通り後者はUnicodeとなり、うまく行きませんでした。
(nkf -gでも確認済みです)
しかし先ほど、フィールド内容のエクスポートにて生成したunicodeテキストファイルを一旦nkf -jオプションでiso-2022-jpに変換後、再びnkfで処理したところ、無事デコードが出来ました。
とりあえずこれを軸に進んでいこうと思います。

>>hondaさん
ありがとうございます。おっしゃる通りの状況です。
上記で私が試したのはまさに書いて頂いたとおりの方法ですね。一旦-jでJISとして保存してからであればうまくいきました。

長く愛用していたメール用のプラグイン、MailItがなかなか16に対応せず、いい機会だとおもってプラグインを使わず、FileMakerだけでどうにかしてみよう、という試みでやっています。
(cURLとJSONの練習問題としても面白かったです)
しかしやはりこのデコードの部分でどうしてもFileMaker内だけの解決が難しい事がわかり、素直に別プラグインを入手しようか迷っているところです。。。

Offline

#7 2017-06-13 18:33:45

honda
Member

Re: ISO-2022-JPをデコードするには?

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

#8 2017-06-13 23:47:25

qb_dp
Member

Re: ISO-2022-JPをデコードするには?

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

#9 2017-06-14 09:18:37

honda
Member

Re: ISO-2022-JPをデコードするには?

おお解決。Gmailの名前が出た時点で確認すべきでした。

Offline

#10 2017-06-14 22:19:36

JL999
Member

Re: ISO-2022-JPをデコードするには?

>> qb_dpさん

ありがとうございます。
わ!なんという遠回りをしていたのでしょう。。。バッチリですね。解決しました!
確か何かの記事で、全文が取れない、みたいなのを読んだ記憶があったのですが、おそらくsnippetと混同していたのだと思います。
ありがとうございました。

>> hondaさん
ありがとうございます。
結局私の確認不足で最短ルートを見逃していましたが、web viewerを使ってjavascriptで処理する、ってのも面白そうですね!
練習問題としてチャレンジしてみます。


無事解決です。これでメールプラグインとはおさらばできそうです。
ありがとうございましたm(_ _)m

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.004 seconds, 7 queries executed - Memory usage: 526.65 KiB (Peak: 547.55 KiB) ]