2017-08-01 8 views
-1

私は、プログラムによって書かれたディスク上のファイルをJsonでエンコードされたデータとともに持っています。UTF-7でFile.ReadAllTextが+文字を無視しています

私はC#のFile.ReadAllText(文字列パス、エンコーディングエンコーディング)を使用して後で読み込みます。無関係の理由から、私たちはUTF-7で作業する必要があります。

私たちの行は、次のようになります。

var content = File.ReadAllText(fileName, Encoding.UTF7); 

それは我々が必要とする基本的にすべてのため、読み、その後の書き込み、正常に動作します。唯一の例外はプラス記号(+)です。ファイルに+記号がある場合、このコードはすべての文字列を無視して文字列全体を返します。だから、

{ "commandValue": "testvalue + otherValue" } 

は、私は、ファイルのバイトをチェックして、および+記号が実際にUTF-7の右の文字(ともUTF内の同じ文字である文字0x2Bを、ある

{ "commandValue": "testvalue otherValue" } 

に変身します-8、それが重要かどうかは分かりません)。

私はそれを読むときに消える理由を理解できません。テストの便宜上

は、私が

var content = File.ReadAllText(fileName, Encoding.UTF8); 

でそれを読んで試してみましたが、それがうまく働きました。文字は消えませんでした。

私は何が間違っている可能性がありますか、File.ReadAllText(fileName、Encoding.UTF7)でそれらの文字を無視しないようにするにはどうすればよいですか?

現在のところ、この問題を抱えている別の文字は見つかりませんでしたが、明らかにそれらのすべてをテストしませんでした。

+0

ファイルがunicodeではなくunicodeに保存されていますか? – Gusman

+0

'+'は、エスケープシーケンスを示すために使用されるUTF7の特殊文字です。 @ Gusmanのポイントには、おそらく文字列はUTF7エンコーディングを使って書かれていなかったでしょう。あなたがUTF7としてそれを読んでいるとき、その '+'はエスケープシーケンスの開始として見られていますが、有効なシーケンスが見つからないので、UTF7エンコーダはちょうど '+'を食べます。あなたのファイルにプラス記号の後ろに ' - 'を付けると、UTF7デコードは正しく動作します(つまり、すべての "+"が "+ - "になります)。しかし、主な問題は、文字列がUTF7エンコーダを使用してファイルに書き込まれなかったことです。 – wablab

+0

@wablabだから、私が尋ねてきた理由は... – Gusman

答えて

2

ファイルがUTF7を使用して書き込まれていません。 '+'は、 "modified base64"シーケンスの開始を示すために使用されるUTF7エンコード方式の特殊文字です。したがって、ファイルがUTF7として読み込まれると、デコーダは '+'を認識し、変更されたbase64シーケンスを期待します(ただし、見つからない)。結果として '+'は出力から除外されます。

表示されている問題を解決するには、ファイルをUTF8で読むか、UTF7エンコーディングを使用するようにファイルを書き込むコードを更新してください。

+0

あなたのコメントからこの答えに "+ - "シーケンスについてのビットを追加することをお勧めします。書き込みと読み込みの部分で作業していたすべての人が現在休暇中であることを考慮して、読み書きのためにエンコードを選択した理由を実際に理解することはできません。 。一時的に、私は入力が必要になるまで、このユーザーのプレースホルダーとして "+ - "メソッドを使用しました。 –

関連する問題