質問: お世話になります。 MicroSoft Access2010で、ある特定のフォルダの配下のすべてのファイルを調べ、 そのファイルのフルパスをキーとして登録するコードをC#で書いています。 ファイルのフルパスでは、きちんと半角スペースと全角スペースは別物として 判断してあるのに、Accessに登録しようとすると、文字列の中に全角スペースが あっても、半角スペースとして登録(INSERT)しようとしてしまい、すでに 登録済みとしてキー違反になってしまいます。 テキストモードとバイナリモードというのがあるのは解ったのですが、INSERTするときに バイナリモードでできればよいとは思うのですが...。 半角と全角をきちんと識別して扱う方法を教えてください。 よろしくお願いいたします。
回答: 何らかの方法でエンコードした状態でテーブルに格納し、その値を利用するときはデコードしてから利用する、というのはどうでしょうか。 例えば、一般的に「URLエンコード」と呼ばれる方法を採用するとします。 以下の2種類のパスを格納する場合を考えます。 ``` "C:\Path 1" ... 半角空白で区切られている "C:\Path 1" ... 全角空白で区切られている ``` UTF-8でURLエンコードした場合、各パスは以下のように表され、区別できます。 ``` "C%3A%5CPath%201" "C%3A%5CPath%E3%80%801" ``` エンコードの方法は、別にURLエンコードでなくてもかまいません。 仮に半角/全角空白が区別できればよい&それ以外の文字はASCII文字しかない、ということなら、もっとシンプルなオレオレエンコード(例えば半角空白を"★"に置き換える、など)でもよいと思います。