Skip to content

シェープファイルやdBASEファイルのLDIDと*.cpg ファイルを調査するサンプル ノートブックや関連技術情報の解説ページ

License

Notifications You must be signed in to change notification settings

EsriJapan/shapefile_info

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

シェープファイル または dBASE ファイル の LDID(Language driver ID)と *.cpg ファイル を調べる

このページはシェープファイル または dBASE ファイルの LDID(Language driver ID)と、*.cpg ファイルを調査するサンプル ノートブック とそれに関連する技術情報を解説しています。

概要

HOW TO: Read and write shapefile and dBASE files encoded in various code pages」の技術文章で記載しているように、ArcGIS の dBASE ファイルのコード ページ変換機能 (名称: dbfDefault) は、システム レジストリにコード ページ値を指定してアクティブ化するものです。

ESRI ジャパンで提供している、「シェープファイル文字コード設定ユーティリティ」 は、この dbfDefault の設定をユーザーインターフェイス で設定するためのツールです。

また、上記のHOW TO には、dbfDefault をレジストリに設定することにより出来ることが解説されているほか、dBASE ファイル の LDID(Language driver ID), *.cpgファイル の有無による、アプリケーションでの挙動について次のように解説されています。

「シェープファイル または dBASE ファイルに LDID や *.cpg ファイルが存在しない場合、ArcGIS は、dbfDefault で定義されたコード ページでファイルがエンコードされると見なします。 たとえば、dbfDefault 値が OEM に設定され、dBASE ファイルに LDID および *.cpg ファイルが両方とも存在しない場合、ArcGIS はファイルが OEM でエンコードされると見なすため、ArcMap、ArcCatalog、および ArcGIS Pro で 8 ビット文字を表示するためにコード ページ変換を実行します (これは、どのアプリケーションも、ANSI コード ページを使用して文字列を表示する Windows プログラムであるためです)。」

裏を返せば、国内で一部のシェープファイル で文字化けが発生するのは、

  • dBASE ファイルの LDID(Language driver ID)が存在しない(値が00)
  • オプションの *.cpg ファイル が提供されていない

の両方があてはまる場合であるとも言えます。

上記のHOW TO は、デスクトップ製品に関する記載となっていますが、ArcGIS Online や ArcGIS Enterprise でも同様の挙動となります。具体的には、シェープファイル の登録時に指定する ZIP ファイル内に格納された dBASE ファイルの LDID と *.cpg ファイル の両方が存在しない場合、公開後のフィーチャ レイヤー が文字化けした状態になります。

dbase ファイル の LDID(Language driver ID)の仕様

dBASE ファイル の LDID(Language driver ID) は、dBase ファイルの ヘッダーセクション に記録されます。実際のバイナリ仕様は、「Data File Header Structure for the dBASE Version 7 Table File」 等で確認することが可能で、それによると、LDID(Language driver ID) は次のように29バイト目から、1バイトで記録されることになっています。

Byte Contents Description
29 1 byte Language driver ID(LDID).

ArcGIS で作成した シェープファイル の仕様

一方、LDID(Language driver ID) の値としてどのような値が記録されているのかを、ArcGIS で作成したシェープファイルを例にして見てみます。

  • ArcGIS で作成したShift-JIS のシェープファイル の場合: dBASE ファイル の LDID(Language driver ID)をバイナリエディターを使って確認してみると、Shift-JIS のシェープファイルの場合、次図のようにdBASE ファイル の LDID(Language driver ID) は13 に設定されています。*.cpg ファイルは作成されません。

    ArcGIS-SJIS-LDID

  • ArcGIS で作成したUTF-8 のシェープファイルの場合: dBASE ファイル の LDID(Language driver ID) は00 が設定されています。また、*.cpg ファイルが作成され、そのファイルの中にUTF-8 と記録されています。

    ArcGIS-UTF8-LOID ArcGIS-UTF8-CPGFILE

確かに「シェープファイルの文字コードに関する注意」 の 既存のシェープファイルの文字コードを確認する方法 に記載がある状態になっているようです。

LDID(Language driver ID)と Codepage の値の対応は、Shapefile C Library のcodepage.html にまとまっています。

サンプル ノートブック と サンプル Python ツールボックス

シェープファイル または dBase ファイル の LDID(Language driver ID)と*.cpg ファイル を一覧表示する処理と、*.cpg ファイルを一括で作成するノートブックとPython ツールボックス を公開しています。
ファイル一式は、こちらから 入手可能です。 動作環境としては Python 3.x 系を対象としております。Python 2.x 系では動作しませんのでご注意ください。

なお、*.cpg ファイル の手動での作成方法は、問題:シェープファイルや DBF ファイルが文字化けする に記載がありますので、そちらをご参照ください。

また、LDID(Language driver ID)は『 シェープファイルの技術情報 』の中では、「言語ドライバ ID」として記載されているものです。

参考情報

本サンプル ノートブック や Python ツールボックス を作成するために参考にさせていただいた種々の情報です。

免責事項

  • 本リポジトリに含まれるノートブック ファイルはサンプルとして提供しているものであり、動作に関する保証、および製品ライフサイクルに従った Esri 製品サポート サービスは提供しておりません。
  • 本ツールに含まれるツールによって生じた損失及び損害等について、一切の責任を負いかねますのでご了承ください。
  • 弊社で提供しているEsri 製品サポートサービスでは、本ツールに関しての Q&A サポートの受付を行っておりませんので、予めご了承の上、ご利用ください。詳細は ESRIジャパン GitHub アカウントにおけるオープンソースへの貢献についてをご参照ください。

ライセンス

Copyright 2022 Esri Japan Corporation.

Apache License Version 2.0(「本ライセンス」)に基づいてライセンスされます。あなたがこのファイルを使用するためには、本ライセンスに従わなければなりません。 本ライセンスのコピーは下記の場所から入手できます。

http://www.apache.org/licenses/LICENSE-2.0

適用される法律または書面での同意によって命じられない限り、本ライセンスに基づいて頒布されるソフトウェアは、明示黙示を問わず、いかなる保証も条件もなしに「現状のまま」頒布されます。本ライセンスでの権利と制限を規定した文言については、本ライセンスを参照してください。

ライセンスのコピーは本リポジトリのライセンス ファイルで利用可能です。

About

シェープファイルやdBASEファイルのLDIDと*.cpg ファイルを調査するサンプル ノートブックや関連技術情報の解説ページ

Resources

License

Stars

Watchers

Forks

Packages

No packages published