307.2. データコーディング、アルファベットおよび国際文字セット
データコーディングとアルファベットは、メッセージごとに指定できます。 エンドポイントにはデフォルト値を指定できます。 これらのオプションの関係と、複数の値が設定されている場合のコンポーネントの動作を理解することが重要です。
データコーディングは、SMPP ワイヤフォーマットの 8 ビットフィールドです。
アルファベットは、データコーディングフィールドのビット 0 ~ 3 に対応します。 一部のタイプのメッセージでは、(データコーディングフィールドのビット 5 を設定することによって) メッセージクラスが使用され、データコーディングフィールドの下位 2 ビットはアルファベットとして解釈されず、ビット 2 と 3 のみがアルファベットに影響します。
さらに、現在のバージョンの JSMPP ライブラリーは、ビット 0 と 1 がメッセージクラスに使用されると仮定すると、ビット 2 と 3 のみをサポートしているようです。 これが、JSMPP の Alphabet クラスが、ISO-8859-1 を示す値 3 (バイナリー 0011) をサポートしていない理由です。
JSMPP はメッセージクラスパラメーターの表現を提供しますが、Camel コンポーネントは現在、データコーディングフィールドの対応するビットを手動で設定する以外に、それを設定する方法を提供していません。
送信メッセージでデータコーディングフィールドを設定する場合、Camel コンポーネントは次の値を考慮し、最初に見つかった値を使用します。
- ヘッダーで指定されたデータコーディング
- ヘッダーで指定されたアルファベット
- エンドポイント設定で指定されたデータコーディング (URI パラメーター)
Camel の古いバージョンには、国際文字セットのサポートにバグがありました。 この機能は、すべてのメッセージに単一のエンコーディングが使用されている場合にのみ機能し、ユーザーがメッセージごとにエンコーディングを変更したい場合は面倒でした。 これを機能させる必要があるユーザーは、Camel のバージョンに次の修正が含まれていることを確認する必要があります。
JIRA Issues Macro: com.atlassian.sal.api.net.ResponseStatusException: Unexpected response received.ステータスコード: 404
をクリックします。
Camel コンポーネントは、データコーディング値を SMSC に送信しようとするだけでなく、メッセージボディーを分析し、それを Java 文字列 (Unicode) に変換し、それを対応するアルファベットのバイト配列に変換しようとします。バイト配列で使用すると、Camel SMPP コンポーネントはデータコーディング値 (ヘッダーまたは設定) を考慮せず、指定されたアルファベットのみを考慮します (ヘッダーまたはエンドポイントパラメーターのいずれかから)。
String 内の一部の文字が選択したアルファベットで表現できない場合は、疑問符 (?) 記号に置き換えることができます。 API のユーザーは、メッセージ本文をコンポーネントに渡す前に ISO-8859-1 に変換できるかどうかを確認し、変換できない場合はアルファベットヘッダーを設定して UCS-2 エンコーディングをリクエストすることを検討することをお勧めします。 アルファベットとデータコーディングオプションがまったく指定されていない場合、コンポーネントは必要なエンコーディングを検出し、データコーディングを設定しようとする場合があります。
アルファベットコードのリストは、SMPP 仕様 v3.4 のセクション 5.2.19 で指定されています。 SMPP 仕様の注目すべき制限の 1 つは、GSM 3.38 (7 ビット) 文字セットの使用を明示的に要求するためのアルファベットコードがないことです。 アルファベットに値 0 を選択すると、SMSC の デフォルト のアルファベットが選択されます。これは通常、GSM 3.38 を意味しますが、保証されていません。 SMPP ゲートウェイの Nexmo では、コントロールパネルオプションを使用して、デフォルトを他の文字セットにマッピングできます。SMSC オペレータに問い合わせて、デフォルトとして使用されている文字セットを正確に確認することをお勧めします。