私は、プログラムによって書かれたディスク上のファイルを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)でそれらの文字を無視しないようにするにはどうすればよいですか?
現在のところ、この問題を抱えている別の文字は見つかりませんでしたが、明らかにそれらのすべてをテストしませんでした。
ファイルがunicodeではなくunicodeに保存されていますか? – Gusman
'+'は、エスケープシーケンスを示すために使用されるUTF7の特殊文字です。 @ Gusmanのポイントには、おそらく文字列はUTF7エンコーディングを使って書かれていなかったでしょう。あなたがUTF7としてそれを読んでいるとき、その '+'はエスケープシーケンスの開始として見られていますが、有効なシーケンスが見つからないので、UTF7エンコーダはちょうど '+'を食べます。あなたのファイルにプラス記号の後ろに ' - 'を付けると、UTF7デコードは正しく動作します(つまり、すべての "+"が "+ - "になります)。しかし、主な問題は、文字列がUTF7エンコーダを使用してファイルに書き込まれなかったことです。 – wablab
@wablabだから、私が尋ねてきた理由は... – Gusman