情報発信
情報発信
当社は、 2006年12月20日にSAPユニコードシステム専用の接続ツールConnectPlusUnicode Version2.1をリリースいたしました。このコラムでは、開発を通じてSAPユニコードシステムについて分かったこと、考えたことなどを紹介していきたいと思っています。
開発に取り組むまで、ユニコードについて「世界中の様々な文字を同時に使うことができる」や「すべての文字が同じ長さになる」ぐらいの曖昧なとらえ方していました。 英字、数字、半角カナ、全角かな漢字を意識する必要のないユニコードは、なにか「先進的」で「開発しやすい」文字コードという漠然としたイメージがあったように思います。しかし、実際に開発を始めてみると、ユニコードについて、いかに自分が無知であったかを痛感しました。
今回は、典型的な誤解の例として、ユニコード文字の長さについての話をしたいと思います。話のなかで分からない言葉が出てくるかもしれませんが、次回から詳しく説明をしたいと思っていますので、気にせずに読み進んでみてください。
例えば、UTF-8 というエンコード方式を使って文字を符号化すると、1文字あたり1バイトから4バイトまでのバイト列に変換されます。数字やアルファベットは、1文字あたり1バイト、半角カナや全角かな、一般的な漢字は、3バイトのバイト列といった具合です。
SAPシステムの品目マスターには「品目テキスト」という項目があります。品目コードに対する名称、つまり品名を入力する項目で、文字型で長さ40の属性を持っています。これまでのSAPシステムの場合、品目テキスト項目に入力可能なデータは、文字数に関係なく40バイトでした。アルファベットや数字は1文字あたり1バイト、日本語文字は、シフトJISで符号化されるので、半角カナは、1文字あたり1バイト、全角かなや漢字は、1文字あたり2バイトになりますが、どんな文字が混じっても、入力可能なデータは40バイトでした。また、SAPシステムから品目テキストの値を出力した場合、特別な処理を行わない限り、シフトJISで符号化されて、未入力部分に空文字が埋められるので、どんな文字が入力されていても、出力されるデータのバイト長は40バイト固定でした。
SAPユニコードシステムの場合でも、品目テキストは、文字型で長さ40の項目であることに変わりはありません。ですが、1文字あたり2バイトの領域が用意され、UTF-16でほとんどの文字が2バイトで符号化されるので、英数字と同様に全角かな文字も40文字まで入力可能になります。一方、品目テキストの値をSAPシステムから出力する際には、文字がUTF-8で符号化されるので、英数字のみ40文字であれば40バイト、全角かな文字のみ40文字であれば120バイト、英数字20文字と全角かな20文字であれば80バイトといった具合に、入力した文字によって出力されるバイト長が変化します。
つまり、ユニコードシステムに切り替えると、これまでバイト固定長で出力されていたデータが、バイト可変長で出力されるようになるのです。例えば、SAPシステムから他のシステムへデータを転送している場合、データフォーマットがCSVやXMLであればこのような可変長のデータを取り扱うことは簡単ですが、バイト固定長のデータフォーマットでデータ転送を行っている場合は、大幅なシステム修正が必要になるかもしれません。
しかし、文字コードは、SAPシステム単体だけで片付けられる問題ではありません。パソコンにデータをダウンロードしたり、取引先へEDI でデータを送信したり、様々な方法でSAPシステムのデータを利用しているのではないかと思います。そして、SAPシステムから出力されるユニコードデータをどうやって処理するのかは、SAPではなく、利用者側が考えることになる問題です。SAPユーザもユニコードについて無知ではいられないと思うのです。
このコラムを通じて、SAPシステムに関わる方々に、少しでもユニコードについて情報を発信できればと思っています。どうぞよろしくお願いいたします。