288.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 では、国際文字セットのサポートにバグがありました。 この機能は、すべてのメッセージにエンコーディングを 1 つ使用した場合にのみ機能し、ユーザーがメッセージごとに変更したい場合に便利です。 これを機能させる必要があるユーザーは、Camel のバージョンに、以下の修正が含まれるようにしてください。
JIRA Issues Macro: com.atlassian.sal.api.net.ResponseStatusException: Unexpected response received.ステータスコード: 404
.
Camel SMPP コンポーネントは、データコーディング値を SMSC に送信しようとするだけでなく、メッセージボディーも分析して Java String(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 Operator をチェックして、デフォルトとして使用されている文字セットを正確に確認することが推奨されます。