2017-01-10 9 views
2

私のWindowsサーバーはトルコ語のロケールに設定されています。 My Firebird DBは、トルコ語の文字を含むパス上に存在します。これは私の接続刺さは、次のようになります。パスに非ASCII文字を使用したFirebird接続

「I/Oエラー:

"user id=somename;password=somepwd;max pool size=200;min pool size=8; 
    connection lifetime=120000; 
    initial catalog=E:\\Açğıİîöşüûin\\Metabase\\metabase.fdb;port number=3050; 
    data source=127.0.0.1;server type=Default;packet size=8192;charset=UTF8;" 

私はこの例外を取得開こうとすると

を接続するためにC#でFirebirdClientを使用しています\ファイル のために "のCreateFile(オープン)\" 操作を\中に "E:\ AgiIsin \メタベース\ metabase.fdb \" \ rを\ nエラー オープンファイル」

にしようとしたときに、

名前のトルコ語の部分がANSIの場合、DBは正常に動作します。

もしFBがトルコ語のパス名を尊重できるようにするにはどうすればいいですか? ANSI文字以外のもの(例えば、キリル文字、アラビア文字、UNICODE、UTF8)を含むパス名を使用できますか?

FBバージョン2.5.2

+0

FirebirdのバージョンとFirebirdのバージョン。ネットプロバイダのバージョンは使用していますか? –

+0

https://msdn.microsoft.com/en-us/library/windows/desktop/dd317756.aspxトルコ語には、ANSIとOEMの異なるコードページがあります。 Windowsでは、デフォルトで、Firebird Serverなどの非グラフィックアプリケーション用のOEMコードページが割り当てられます。通常のWin32アプリケーションでは、パスANSI-> OEMを事前にコード化することができますが、UTF-16文字列を使用してDotNetアプリケーションをプリコードできると推測しています。このようなオプションはないと思います.... FirebirdClientのソースをダウンロードしてこのハック –

+0

私はFB 2.5.2を使用しています – user7399006

答えて

1

歴史的にASCII文字のみがサポートされており、それはOSのロケールのデフォルトの文字セットと同じである場合も動作します接続キャラクタ・セットの文字を使用して(私はいくつかの例外があると信じて特に2.5より前のバージョンではUTF-8を使用していました)。残念ながら、ADO.netプロバイダーは常にデータベース名を送信するためにUTF-8を使用します。

データベースパラメータバッファにisc_dpb_utf8_filenameオプションが含まれていて、Firebird ADSプロバイダがこの拡張機能をサポートしている場合は、Firebird 2.5以降でUTF-8を使用することができます。ですから、私はあなたがこれをサポートしていない旧バージョンのFirebird ado.netプロバイダーを使用するか、Firebird 2.1以前を使用しているとみなします。

あなたが使用しているパスを少し近づけて見ても、FirebirdがWindows上で行うパス正規化のいくつかを実行すると、パスの大文字と小文字を区別できません。あなたのコード内のパスはAçğıİîöşüûinですが、エラーメッセージはA�giI��s��inです(私のシステムでは私はUTFの置換文字を持っておらず、AçgiIîösüûinを表示しています)。少なくとも正規化が行われたことを示しています。ğ - >gı - >i,İ - >Iおよびş - >sである。たとえば、フォルダの名前をAçgiIîösüûinに変更しても、C#コードでAçğıİîöşüûinを使用しても機能します。これは、パスの正規化に関連していること

は、IパスD:\Temp\Açğıİîöşüûin\testdatabase.fdbを使用して火の鳥3とFirebirdの2.5データベースを開こうとすると、サポートされていないODSのバージョンに関する結果のエラーメッセージがD:\TEMP\AÇGIIÎÖSÜÛIN\TESTDATABASE.FDBとして経路を報告するという事実によって裏付けられているように見えます

使用するパスに注意する必要があるように見えます。パスのみをASCIIで使用するか、エイリアスを使用することをお勧めします(ただし、同じ問題が発生する可能性があります)。

Firebirdのバグかもしれませんが、私はそれについてはわかりません:Windows自体は、初期のエラーは元のケースであるが正規化されているため、同様の正規化を行う可能性があります。あなたはfirebird-develメーリングリストに質問を投稿することを検討すべきです。

+0

....エイリアスはエイリアスがあれば、この問題を再び解決できます。 confはANSIまたはOEMまたはUTF-8コードページで埋められるでしょうか?それを修正した後でも、少なくともC#プログラム/プロバイダーの特別な要件はありません。 –

+0

@ Arioch'The AFAIKロケールのデフォルト文字セット(Windowsの場合、従来のロケールFirebird 2.5以前のバージョン、Firebird 3のUTF-8、デフォルトのafaik)、Firebird 3のUTF-8などがありますが、これは大変です。 –

+0

これまでのすべての回答ありがとう WHAT isc_dpb_utf8_filenameオプションにはたくさんの参照があります。アイデア? – user7399006

関連する問題