62949


お世話になります。

MicroSoft Access2010で、ある特定のフォルダの配下のすべてのファイルを調べ、  
そのファイルのフルパスをキーとして登録するコードをC#で書いています。  
ファイルのフルパスでは、きちんと半角スペースと全角スペースは別物として  
判断してあるのに、Accessに登録しようとすると、文字列の中に全角スペースが  
あっても、半角スペースとして登録(INSERT)しようとしてしまい、すでに  
登録済みとしてキー違反になってしまいます。

テキストモードとバイナリモードというのがあるのは解ったのですが、INSERTするときに  
バイナリモードでできればよいとは思うのですが…。

半角と全角をきちんと識別して扱う方法を教えてください。

よろしくお願いいたします。


CC BY-SA 4.0
2020-02-01T04:23:58.983
62687
2020-02-22T16:31:57.143
2020-02-22T16:31:57.143
3060
9374
question
sql ms-access
Access INSERTで文字列をセットするときに、全角スペースが半角スペースとして見られてしまう


うろ覚えですが、Accessでは空白に限らず全角・半角を区別しないはずです。それ以外にも「ファイル名」と「テキスト」（の一意制約）とでは区別するルールが異なるため、ファイル名をテキストで扱うこと自体に無理があります。


CC BY-SA 4.0
2020-02-01T21:43:38.083
62704
2020-02-01T21:43:38.083
4236
62687
answer


何らかの方法でエンコードした状態でテーブルに格納し、その値を利用するときはデコードしてから利用する、というのはどうでしょうか。

* * *

例えば、一般的に「URLエンコード」と呼ばれる方法を採用するとします。  
以下の2種類のパスを格納する場合を考えます。

[code]

    "C:\Path 1" ... 半角空白で区切られている
    "C:\Path　1" ... 全角空白で区切られている
    
[/code]

UTF-8でURLエンコードした場合、各パスは以下のように表され、区別できます。

[code]

    "C%3A%5CPath%201"
    "C%3A%5CPath%E3%80%801"
    
[/code]

* * *

エンコードの方法は、別にURLエンコードでなくてもかまいません。  
仮に半角/全角空白が区別できればよい＆それ以外の文字はASCII文字しかない、ということなら、もっとシンプルなオレオレエンコード（例えば半角空白を"★"に置き換える、など）でもよいと思います。


CC BY-SA 4.0
2020-02-11T06:29:54.357
62949
2020-02-11T06:29:54.357
9801
62687
answer