ページの先頭行へ戻る
Symfoware Server V12.7.0 アップデート情報
FUJITSU Software

3.59 補助文字のコード変換時のコード系を変更

変更内容

Symfoware Server 9.1.0以前の補助文字のコード変換は、Unicode 2.0(UCS2/UTF8)でコード変換を行います。

Symfoware Server 9.2.0以降の補助文字のコード変換は、JIS2004のUNICODEの4バイト文字(補助文字)に対応するため、Unicode 4.1(UTF16/UTF8)でコード変換を行います。

Symfoware Serverのバージョンレベル

文字コード

各国語文字コード

9.1.0以前

UTF8(UNICODE 2.0)

UCS2

9.2.0以降

UTF8(UNICODE 4.1)

UTF16

ただし、以下の製品をインストールしている場合、Unicode 2.0でコード変換を行います。

Unicode 2.0とUnicode 4.1の補助文字のコード変換はサロゲートペア領域の扱いが異なります。

Unicode 4.1はUNICODEの補助文字を、UTF-8に変換すると、4バイト文字に変換します。

Unicode 2.0はUTF8として3バイトまでしか扱えません。そのため、UNICODEの補助文字をUTF-8に変換すると、3バイト文字のペア(3バイト×2)に変換されます。

非互換

UTF8/UCS2とUTF8/UTF16の間で、補助文字のサロゲートペア領域に対する扱いが異なります。

入力データ

変換元

変換先

結果

サロゲート領域の上位(D800~DBFF)、下位(DC00~DFFF) がペアになっている場合

UCS2

UTF8(UNICODE 2.0)

UCS2

対応するコード(2文字)

UTF16

UTF8(UNICODE 4.1)

UTF16

対応するコード(1文字)

サロゲート領域の上位(D800~DBFF)の直後に、下位(DC00~DFFF)以外が現れた場合

UCS2

UTF8(UNICODE 2.0)

UCS2

それぞれ独立した文字として変換

UTF16

UTF8(UNICODE 4.1)

UTF16

変換エラー

サロゲート領域の上位(D800~DBFF)以外の直後に、下位(DC00~DFFF)が現れた場合

UCS2

UTF8(UNICODE 2.0)

UCS2

それぞれ独立した文字として変換

UTF16

UTF8(UNICODE 4.1)

UTF16

変換エラー

入力データがサロゲート領域の上位(D800~DBFF)で終了した場合

UCS2

UTF8(UNICODE 2.0)

UCS2

対応するコード

UTF16

UTF8(UNICODE 4.1)

UTF16

変換エラー

EDA080~EDBFBF

(UCS2のD800~DFFFに相当)

UTF8(UNICODE 2.0)

UCS2

対応するコード

UTF8(UNICODE 4.1)

UTF16

変換エラー

F0808080~F4BFBFBF

(1~16面のコード)

UTF8(UNICODE 2.0)

UCS2

変換エラー

UTF8(UNICODE 4.1)

UTF16

対応するコード

このため、Symfoware Server 9.1.0以前の環境からSymfoware Server 9.2.0以降の環境に、データベースに格納しているデータ、および、アプリケーションを移植するときに、コード変換エラーが発生するという非互換があります。

TCP/IP接続のアプリケーションにおいて、Unicode 2.0でコード変換を行うSymfoware Server 9.1.0以前のバージョンレベル、または、Interstage Charset Managerをインストールしている環境と混在する場合、クライアント用の動作環境ファイルのCHARACTER_TRANSLATEの指定により非互換が発生します。

クライアント

サーバ

CHARACTER_TRANSLATE

非互換の有無

Symfowar Server Client 9.1.0以前、
または、
Unicode 2.0のInterstage Charset Managerをインストール

Symfoware Server 9.2.0以降

SERVER

非互換が発生します。

CLIENT

非互換は発生しません。

Symfoware Server Client 9.1.1以降

Symfoware Server 9.1.0以前、
または、
Unicode 2.0のInterstage Charset Managerをインストール

SERVER

非互換は発生しません。

CLIENT

非互換が発生します。


  1. 以下の場合に、アプリケーションに返却される補助文字の値が、Symfoware Server 9.1.0以前の環境とSymfoware Server 9.2.0以降の環境で異なるという非互換があります。

    1. データベースの文字コード系がUNICODEである。かつ、

    2. 各国語文字列の列を含む表を定義する。かつ、

    3. 2.の各国語文字列に補助文字を含むレコードが存在する。かつ、

    4. 2.の表に対して、以下のいずれかのアプリケーションまたはコマンドでSQL文を実行する。かつ、

      1. 埋込みSQLを使用したアプリケーション

      2. JDBCドライバを使用したアプリケーション

      3. ODBCドライバを使用したアプリケーション

      4. rdbexecsqlコマンド

      5. rdbunlsqlコマンド

    5. 各国語文字列型ホスト変数のコード系がUTF8である。

  2. 以下の場合に、rdbunlコマンドの出力ファイルに含まれる補助文字の値が、Symfoware Server 9.1.0以前の環境とSymfoware Server 9.2.0以降の環境で異なるという非互換があります。

    1. データベースの文字コード系がUNICODEである。かつ、

    2. 各国語文字列の列を含む表を定義する。かつ、

    3. 2.の表の各国語文字列の格納データに、補助文字が含まれる。かつ、

    4. 3.の表のDSIに対して、rdbunlコマンドを実行する。

  3. 以下の場合に、Symfoware Server 9.1.0以前の環境では正常終了していたアプリケーションが、Symfoware Server 9.2.0以降の環境で以下のいずれかのエラーが発生するという非互換があります。

    • JYP2201E 入力ホスト変数にコード変換できない文字が含まれています.

    • JYP2206E SQL文にコード変換できない文字が含まれています.

    • JYP2063E コード変換に失敗しました.

    • JYP2202I 出力ホスト変数へのコード変換で置換した文字があります.

    1. データベースの文字コード系がUNICODEである。かつ、

    2. 各国語文字列の列を含む表を定義する。かつ、

    3. 2.の表に対して、以下のいずれかのアプリケーションまたはコマンドでSQL文を実行する。かつ、

      1. 埋込みSQLを使用したアプリケーション

      2. JDBCドライバを使用したアプリケーション

      3. ODBCドライバを使用したアプリケーション

      4. Symfoware .NET Data Providerを使用したアプリケーション

      5. rdbexecsqlコマンド

      6. rdbuptコマンド

      7. rdbunlsqlコマンド  

    4. 3.のSQL文の以下のいずれかに補助文字が含まれる。

      1. 文字列定数

      2. ホスト変数

      3. 動的パラメタ

      4. データベースの格納データ

      5. プロシジャのSQL変数

      6. プロシジャのパラメタ

    5. 4.のデータ型が各国語文字列型である。かつ、

    6. 4.の各国語文字コード系がUTF8である。

  4. 以下の場合に、Symfoware Server 9.1.0以前の環境では正常終了していたRDBコマンドが、Symfoware Server 9.2.0以降の環境で以下のエラーが発生するという非互換があります。

    • qdg02483u d*件目: 異常データが存在します 列名=s* t*

    1. データベースの文字コード系がUNICODEである。かつ、

    2. 各国語文字列の列を含む表を定義する。かつ、

    3. 2.の表の各国語文字列の格納データに、補助文字が含まれる。かつ、

    4. Symfoware Server 9.1.0以前の環境で、3.の表のDSIに対して、rdbunlコマンドを実行する。かつ、

    5. Symfoware Server 9.2.0以降の環境で、入力ファイルに4.で出力されたファイルを指定して、以下のいずれかのコマンドを実行する。

      1. rdbsaloaderコマンド

      2. rdbsloaderコマンド

      3. rdbsuloaderコマンド  

  5. 以下の場合に、Symfoware Server 9.1.0以前の環境では正常終了していたlxrepcreコマンドが、Symfoware Server 9.2.0以降の環境で以下のエラーが発生するという非互換があります。

    • RP02060 USINGにおいて定数の囲み文字に誤りがあります 列名='s*'

    1. データベースの文字コード系がUNICODEである。かつ、

    2. Linkexpress Replication option を使用したレプリケーション運用において、lxrepcreコマンドの入力ファイルにWHEREを指定している。かつ、

    3. 2.のWHEREに指定する列のデータ型が各国語文字列型である。かつ、

    4. 3.を比較する定数文字列に補助文字が含まれる。

  6. 以下の場合に、rdbcycexpコマンドの出力する内容において、補助文字の出力データがSymfoware Server 9.1.0以前の環境とSymfoware Server 9.2.0以降の環境で異なる場合があります。

    1. データベースの文字コード系がUNICODEである。かつ、

    2. Interstage Business Application Serverの高信頼性ログ機能によるユーザログテーブルの運用において、ユーザログレコードの出力フォーマットに各国語文字列型が含まれる。

    3. rdbcycexpコマンドのiオプションに2.のユーザログテーブルのDSIを指定する。かつ、

    4. 3.のDSIの2.のデータに補助文字が含まれる。

対処方法

  1. Symfoware Server 9.2.0以降の環境に移行後に、補助文字をUnicode 4.1で扱う運用したい場合、Symfoware Server 9.1.0以前の環境で扱うデータやアプリケーションを、Charset Managerを使用して以下の手順でUnicode 4.1のUTF8に変換してください。

    1. 以下を実行

      cat original.txt | iconv -a -f UTF8 -t UCS2 > ucs2.txt

      備考. original.txtは、Symfoware Server 9.1.0以前の環境のアンロードしたデータやアプリケーションになります。

    2. 以下のいずれかを実行

      • 1.の実行結果ucs2.txtがリトルエンディアンの場合

        cat ucs2.txt     | iconv -a -f UTF16LE -t UTF8_4 > utf8_4.txt
      • 1.の実行結果ucs2.txtがビッグエンディアンの場合

        cat ucs2.txt     | iconv -a -f UTF16BE -t UTF8_4 > utf8_4.txt

    変換した後のデータについては、問題ないことを確認してください。

    参照

    iconvコマンドおよびエンディアンについては、“Interstage Charset Manager使用手引書 標準コード変換機能編”の“iconvコマンド(UNIX系)”および“変換時の動作について”を参照してください。

  2. TCP/IP接続のアプリケーションにおいて、Unicode 2.0でコード変換を行うSymfoware Server 9.1.0以前のバージョンレベル、または、Interstage Charset Managerをインストールしている環境と混在する場合、クライアント用の動作環境ファイルのCHARACTER_TRANSLATEにUnicode 2.0でコード変換を行うクライアントおよびサーバを指定してください。

    クライアント

    サーバ

    CHARACTER_TRANSLATE

    Symfoware Server Client 9.1.0以前、
    または、
    Unicode 2.0のInterstage Charset Managerをインストール

    Symfoware Server 9.2.0以降

    CLIENT

    Symfoware Server Client 9.1.1以降

    Symfoware Server 9.1.0以前、
    または、
    Unicode 2.0のInterstage Charset Managerをインストール

    SERVER

  3. Symfoware Server 9.2.0以降の環境に移行後に、Symfoware Server 9.1.0以前の環境と同様に補助文字をUnicode 2.0で扱いたい場合、RDB構成パラメタファイルに“RDBUNICODEV2=YES”を指定してください。

    RDB構成パラメタファイルの“RDBUNICODEV2=YES”の指定は、PH05736の修正により有効になります。

    PH05736はサーバとクライアントに対して修正しています。

    以下に該当する場合、PH05736の修正が有効にならず、本非互換は解消されません。

    • クライアントにPH05736が未適用、かつ、クライアント用の動作環境ファイルの“CHARACTER_TRANSLATE=CLIENT”を指定

    • Symfoware Serverが9.1.0以前の環境、かつ、クライアント用の動作環境ファイルの“CHARACTER_TRANSLATE=CLIENT”を指定

    上記に該当する場合、クライアント用の動作環境ファイルの“CHARACTER_TRANSLATE=SERVER”を指定するか、CHARACTER_TRANSLATEの指定を削除してください。

    RDB構成パラメタファイルに“RDBUNICODEV2 = YES”を指定した場合、以下のいずれかに該当する場合、UTF32を使用するアプリケーションおよびrdbコマンドは使用できません。使用した場合JYP1080Eまたは、qdg13110uを出力してエラー終了します。

    1. RCSオプションにUTF32_BEまたはUTF32_LEを指定してsqlpcobまたは、sqlcobolコマンドでコンパイルしたCOBOLアプリケーションを実行した場合

    2. UオプションにUTF32またはUTF32Bを指定して以下のいずれかのコマンドを実行した場合

      • rdbsloader

      • rdbsaloader

      • rdbsuloader

      • rdbunl

      • rdbupt

    JDBCドライバが動作するJDKについて、Java SE 5.0でUnicode 4.0のコード変換や補助文字のコードポイントを扱うメソッドが追加されています。

    Javaアプリケーションにおいて、補助文字を扱う場合、本パラメタを指定しないでください。