OutSystemsでShift-JISやEUC-JPのデータを扱う


OutSystemsで作成するアプリケーションを既存のシステムと接続する場合、相手のシステムから渡されるデータがShift-JISやEUC-JPなどの文字コードセットでエンコードされていることがあります。

そういったデータを、OutSystemsのText型に変換する方法です。

サンプル

Forgeコンポーネント:https://www.outsystems.com/forge/component-overview/7064/housesoftsampletraditional
ConvertCharacterEncoding Screenを参照してください。

Shift-JISやEUC-JPでエンコードされたテキストファイルをアップロードして、指定エンコードとして解釈した結果を画面内に表示する画面になっています。

環境

Personal Environment(Version 11.0.606.0)
Service Studio(Version 11.6.22)
BinaryData

参照

組み込みのBinaryData APIから、BinaryDataToText Actionを追加しておきます。

使い方

BinaryDataToText ActionのInputパラメータは以下の通り

  • BinaryData:変換対象のデータ。BinaryData型です。
  • Encoding:文字コードセットを表す文字列。Descriptionによると、有効なのは、"unicode", "utf-8", "utf-16", "ascii"ですが、他の文字列も使えます。後述

外部システムから来たデータを一旦BinaryData型で受け取り、Encodingには、そのデータの文字コードセットを表す文字列をセットします。

Outputパラメータは、OutSystemsのText型なので、あとは普通に処理ができます。

試してみた限りでは、Encodingに"shift_jis", "shift-jis", "euc-jp"などを指定しても問題なく変換できました。

内部処理を検討してみる

ここからは、使うにあたっては知らなくてもいいことです。
内部処理が気になる人向け。

BinaryData APIはExtensionです。
そのため、IntegrationStudioで開き、更にオリジナルの実装コード(C#)をVisual Studioで開くことができます。

Inputパラメータで渡した、Encoding文字列は以下のコードで利用されています。

System.Text.Encoding.GetEncoding (ssEncoding)

これは、.NET FrameworkのライブラリのSystem.Text.Encodingクラスのメソッドです。
https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding.getencoding?view=netframework-4.6.1#System_Text_Encoding_GetEncoding_System_String_

このメソッドのパラメータの説明は以下

The code page name of the preferred encoding. Any value returned by the WebName property is valid. Possible values are listed in the Name column of the table that appears in the Encoding class topic.

Encoding Class下側の表のName列に書かれている文字列は使えるということのようです。

実はこの中には、shift_jisはあっても、shift-jisはないんですが。どちらを使うかというと、一応の根拠を公式ドキュメントに求められるshift_jisのほうがいいかもしれません。