文字コードUTF-8のファイルを判別する方法

World WideのLANSA技術フォーラムに投稿されたトピックと、日本のお客様からのお問い合わせへの回答の中から、皆様にお役に立つLANSAの開発テクニックやトラブルシュートに関する情報をご紹介します。

質問

IBM i上に、アップロードされたCSVファイルの文字コードが、UTF-8であるか判別する方法はありますか?

回答


IBM i上で、アップロードされたファイルが、「Shift_JIS」か「UTF-8」かを検査する方法はロジックで行ってください。
「UTF-8」ファイルでは、BOM(16進’EFBBBF’)がファイルの先頭に含まれるので、組み込み関数「STM_FILE_READ」でファイルの内容を読んでみて、BOMの値を検査してください。
以下は、検査ロジックのサンプルです。

*
Define Field(#BOM) Type(*CHAR) Length(10)
Define Field(#HEX) Type(*CHAR) Length(6)
Define Field(#FILENO) Type(*DEC) Length(3) Decimals(0)
Define Field(#RETNCODE) Type(*CHAR) Length(2)
Define Field(#OPTIONS) Type(*CHAR) Length(256) Desc('オプション’) Input_Atr(LC)
*
Change Field(#OPTIONS) To("’Read BINARY LineTerminator=ALL"’)
Use Builtin(STM_FILE_OPEN) With_Args(#FileName #OPTIONS) To_Get(#FILENO #RETNCODE)
Use Builtin(STM_FILE_READ) With_Args(#FILENO) To_Get(#BOM)
Use Builtin(BINTOHEX) With_Args(#BOM) To_Get(#HEX)
*
If Cond(#HEX = EFBBBF)
* UTF-8のファイルとして処理する
Endif

有償の「LANSAテクニカル・ホットライン・サービス」をご契約いただければ、データベースの検索(https://demo.lansa.jp/qadb/)」から、今回、ご紹介した以外の技術情報も探すことが出来ます。 「LANSAテクニカル・ホットライン・サービス」のご契約についてはお問い合わせフォーム(https://www.lansa.jp/inquiryforms/)よりお問い合わせください。