EncodingUTF-8 のデータ型エンコーディングを持つテキスト ファイルがあります。純粋に英語の文字の場合、すべてのデータが正常に解析され、テーブルにインポートされます。しかし、フィールドに漢字が混在していると問題が発生します。漢字などの文字が混在している場合に、データを正常に読み取って解析する方法。
以下は、中国語の文字を保持するテキスト タブ区切りファイルのサンプルです。デバッグ モードの間、変数 ls_unicode はテキスト ファイルの値を保持し、漢字が存在します。
データがテーブルに保存されると、これが出力されます。
以下のスクリプトはなんとか漢字を取得し、DW update メソッドは成功を返しますが、列の値を確認すると、Globe MUX Project(客户号合同:NA). また、Globe MUX Project(客户合同号:NA) という値が存在することをデバッグ モードから確認しました。DB 列も NVarChar データ型に変更されます。
//#################################
li_FileNum = FileOpen(is_sourcepath, StreamMode!, Read!, LockWrite!)
ll_FileLength = FileLength(is_sourcepath)
eRet = FileEncoding(is_sourcepath)
IF eRet = EncodingANSI! and ll_filelength <= 32765 THEN
li_bytes = FileReadEx(li_FileNum, lbl_data)
ls_unicode = String(lbl_data, EncodingUTF8!)
dw_1.Reset( )
dw_1.ImportString(ls_unicode)
ls_sonum = String(dw_1.Object.shipmentOrderNum[1])
ls_chinesechar = String(dw_1.Object.contractnum[1])
sle_char.Text = String(dw_1.Object.contractnum[1])
dw_1.SetItem(1,'contractnum',ls_chinesechar)
dw_1.SetItem(1,'fname','TEST')
END IF
FileClose(li_FileNum)
IF dw_1.Update( ) = 0 THEN
Commit Using SQLCA;
END IF
//#################################
また、テストを行い、手動の SQL Insert ステートメントを実行したところ、値「Globe MUX Project(客户合同号:NA)」が列に正常に記録されました。列のデータ型が NVarChar/NChar/または NText の場合、PB はこれを自動的に行わないと思います。
INSERT INTO SCH_HUAWEI_EDI_3B12RHDR ( COntractnum , FNAME )
VALUES ( N'Globe MUX Project(客户合同号:NA)' , 'TEST' )