1

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

我正在使用 C# 的 File.ReadAllText(string path, Encoding encoding) 稍后读取它。由于不相关的原因,我们必须使用 UTF-7。

然后我们的行看起来像这样:

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

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

{ "commandValue": "testvalue + otherValue" }

变成

{ "commandValue": "testvalue  otherValue" }

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

我无法弄清楚为什么它们在阅读时会消失。

为了测试,我尝试阅读它

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

它工作得很好。字符没有消失。

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

到目前为止,我还没有找到另一个有这个问题的字符,但我显然没有测试所有的字符。

4

1 回答 1

5

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

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

于 2017-08-02T14:22:06.440 回答