我在磁盘上有一个由程序写入的文件,其中一些数据用 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) 不忽略这些字符?
到目前为止,我还没有找到另一个有这个问题的字符,但我显然没有测试所有的字符。