4

866 コードページ (DOS) としてエンコードされた dbf ファイルがあります。

以下のコードを使用して、それを読み取ろうとしています。問題は、ファイルがコード ページ 1252 であるかのように、取得した文字列が形成されることです。SO や他のフォーラムで他の質問を確認しましたが、これまでのところ運がありません。それを適切に読むためのホットなアイデアを探しています。

var ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\PathtoFile\;Extended Properties=""dBase 5.0""";
var  dBaseConnection = new System.Data.OleDb.OleDbConnection(ConnectionString );

dBaseConnection.Open();

var dBaseCommand = new System.Data.OleDb.OleDbCommand("SELECT * FROM FileName",dBaseConnection);
var dBaseDataReader =  dBaseCommand.ExecuteReader(CommandBehavior.SequentialAccess);


while( dBaseDataReader.Read()){

Encoding.GetEncoding(866).GetString(Encoding.GetEncoding(1252).GetBytes(dBaseDataReader.GetString(2)).Dump();  // Does not help 
}
4

2 に答える 2

3

ファイルはどこから来ましたか?同じフォルダにある他のファイル拡張子(FPT / CDX / IDX / NTXなど)は何ですか?これにより、VFP、dBase、Clipperなどの手がかりが得られるはずです。

Visual Foxpro(VFP)データの場合は、http://www.microsoft.com/en-gb/download/details.aspx?id = 14839からVFPOLEDBプロバイダーをインストールし、httpから取得した次の接続文字列のいずれかを使用する必要があります。 ://www.connectionstrings.com/visual-foxpro#vfp-ole-db-provider

データベースコンテナ(.DBC):

Provider=vfpoledb;Data Source=C:\MyDbFolder\MyDbContainer.dbc;Collating Sequence=machine;

無料のテーブルディレクトリ:

Provider=vfpoledb;Data Source=C:\MyDataDirectory\;Collating Sequence=general;

単一のDBFファイルに接続します。

Provider=vfpoledb;Data Source=C:\MyDataDirectory\MyTable.dbf;Collating Sequence=machine;

VFPOLEDBプロバイダーの詳細については、 http://msdn.microsoft.com/en-us/library/aa975609%28v=vs.71%29.aspxを参照してください。

興味深いことに、それがコードページ866としてエンコードされていることをどのように知っていますか?Visual Foxpro DBFのオフセット29のバイトには、コードページマークが格納されます。http://msdn.microsoft.com/en-us/library/aa975386%28v=vs.71%29.aspxを参照してください

于 2012-11-07T14:06:39.580 に答える
0

1252 コード データを取得したという証拠は見当たりません。コードページを 1252 から 866 に変換しようとして失敗しました。したがって、1252 コードページではありません。現在、ドライバーが 1 バイト以外の文字列を返す問題を修正しました。それもあなたの問題かもしれません。

解決:

HKLM\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase\BDE キーの値を確認します。2 でなければなりません。そうでない場合、またはキーが存在しない場合 (これが私の場合でした)、DWORD パラメータを作成して 2 に設定します。

このキーの詳細については、http ://support.microsoft.com/kb/307455/en-us を参照してください。

于 2013-02-05T11:44:40.140 に答える