File.ReadAllText 使用 UTF-7 忽略 + 字符

File.ReadAllText with UTF-7 ignoring + characters

我在磁盘上有一个由程序写入的文件,其中一些数据编码为 Json。

我是用C#的File.ReadAllText(string path, Encoding编码) 以后再看。由于不相关的原因,我们必须使用 UTF-7。

我们的线条看起来像这样:

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

它工作正常,先写后读,基本上我们需要的一切。唯一的例外是加号 (+)。如果我们的文件中有一个 + 号,此代码 returns 整个字符串将忽略所有这些。所以

{ "commandValue": "testvalue + otherValue" }

变成

{ "commandValue": "testvalue  otherValue" }

我检查了文件字节,+号确实是char 0x2B,这是UTF-7中的正确字符(UTF-8中也是相同的字符,不确定是否重要)。

我不明白为什么它们在阅读时消失了。

为了测试,我试过用

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

而且效果很好。字符没有消失。

我可能做错了什么,我怎样才能让 File.ReadAllText(fileName, Encoding.UTF7) 不忽略这些字符?

到目前为止,我还没有发现其他有这个问题的字符,但我显然没有测试所有的字符。

文件不是使用 UTF7 编写的。 '+' 是 UTF7 编码方案中的一个特殊字符,用于表示 "modified base64" 序列的开始。因此,当文件被读取为 UTF7 时,解码器看到“+”,期望修改后的 base64 序列(但找到 none),然后继续像往常一样解码文件。结果,“+”从输出中被抑制。

要解决您遇到的问题,您可以尝试以 UTF8 格式读取文件,或者更新写入文件的代码以确保它使用 UTF7 编码。