【bubble】Unicode文字の変換

はじめまして、MuraTatsuと申します。

表題の件でちょっと沼にはまっておりまして、どなた様かおわかりになられるようでしたらお助け頂きたくトピックあげさせて頂きました。

やりたいこと

  • スマレジという外部のウェブサービスが提供するAPIの送信機能を使って送られたデータを、bubbleで作ったアプリケーション内で保存したいのですが、送ってくるデータがUnicodeであるためそれをアンエスケープして読める文字列にしたものを保存したいと思っています。

↓受け取るデータはこんな感じです↓

現在の状態・発生している問題

  • ワークフローの中で、受け取ったデータから保存したい値の部分を切り出して、Server scripアクションの中にネットに見つけた変換コードを貼り付けて動かしてみました。

変換しようとする元データが

  • 「全角文字だけ」

  • 「全角文字+半角カナだけ」

  • 「半角英数だけ」
    で構成されている文字列の時はうまく変換出来ていますが、

  • 「全角文字と半角英数」が混じった文字列
    を変換させると、全角文字だけを結果として返してきます(例:"2023年モデル"という文字列は"年モデル"にされてしまう)。

実現したいこと

前述の例で言えば、受け取った文字列

  • 2023\u5e74\u30e2\u30c7\u30eb

を変換して

  • 2023年モデル

という文字列で保存したいと思っておりますが、正規表現の指定の仕方が悪いのかそこにたどり着けません。server scriptアクションに貼り付けたソースは以下の通りです。

-----8<-----(ここから)-----8<-----

var unicodeUnescape = function(str) {
var result = ‘’, strs = str.match(/\u.{4}/ig);

if (!strs) return '';

for (var i = 0, len = strs.length; i < len; i++) {
	result += String.fromCharCode(strs[i].replace('\\u', '0x'));
}

return result;

};

var result = unicodeUnescape(data);
result;

-----8<-----(ここまで)-----8<-----

ここをこう変えれば望んでいる変換結果を得られるよ!というのがおわかりになられる方いらっしゃいましたら、教えて頂けますでしょうか?どうぞよろしくお願い致します。

bubble の server script を書いたことがないので、こんな感じで行けるのでは?という回答になりますが、Node script のところに以下だけを書けば行けそうな気がします。

decodeURIComponent(str)

だめだったらごめんなさいm(_ _)m

「いいね!」 1

ご返信ありがとうございます!
早速やってみました。
が、残念ながら状況変わらず・・・、でした。
もう少し色々トライしてみます。
また何かアイデアあればお聞かせ頂けると嬉しいです〜。

状況変わらずというと、エラーになったりはしなかったけど、「2023年モデル」にならず、「年モデル」になってしまったということでしょうか?

このコードは、\u + 4文字 の部分しか変換されないコードになってまして、str.match(/\\u.{4}/ig)の時点で、「2023」という文字列は切り捨てられてます…

で、少しToolbox の使い方を調べてみました。

var result = decodeURIComponent(data);
result;

既にやられてるかもしれませんが、このように書かれてもうまく行かないでしょうか?

「いいね!」 1

ご教授いただいたものに張り替えて、
screenshot 2022-10-25 16.25.06

動かしてみましたら、

今回は変換せず・・・、でございました :smiling_face_with_tear:

decodeURIComponent(JSON.parse("${data}"));

これでいけました!へっぽこエンジニアでした。笑

「いいね!」 1

本当に何度もすみません・・・ :sweat_drops:

ご教授頂いた内容でこんなふうに設定して、
screenshot 2022-10-25 17.30.07

動かしてみたら、これまでと違うエラーがスマレジから送られて来ました :smiling_face_with_tear:

bubble側で何か書き足してあげる必要はありますでしょうか?
何から何までお尋ねしてしまい恐縮です m(_ _)m

すみません、少し自分のコードがおかしいとこがありました。ダブルクオートの両側に バッククォートが必要でした。

decodeURIComponent(JSON.parse(`"${data}"`));

そして、result; はもう必要ないです。

「いいね!」 2

すごい!!!
出来ました!

ほかにも色々な文字の組み合わせで試してみましたが、全て成功しました。
本当に本当にありがとうございました!

「いいね!」 4