我在磁盘上有一个由程序编写的文件,其中一些数据用Json编码。
我正在使用C#的File.ReadAllText(字符串路径,编码编码)来稍后读取它。出于无关的原因,我们必须使用UTF-7。
我们的行看起来像这样:
var content = File.ReadAllText(fileName, Encoding.UTF7);
它工作正常,写作然后阅读,基本上我们需要的一切。唯一的例外是加号(+)。如果我们的文件中有一个+号,则此代码返回整个字符串,忽略所有这些。所以
{ "commandValue": "testvalue + otherValue" }
变成
{ "commandValue": "testvalue otherValue" }
我检查了文件字节,+符号确实是字符0x2B,这是UTF-7中的正确字符(在UTF-8中也是相同的字符,不确定是否重要)。
我无法弄清楚为什么它们在阅读时会消失。
为了测试,我尝试用
阅读var content = File.ReadAllText(fileName, Encoding.UTF8);
它工作正常。这些人并没有消失。
我可能做错了什么,怎样才能使File.ReadAllText(fileName,Encoding.UTF7)不忽略这些字符?
到目前为止,我还没有找到另一个有此问题的字符,但我显然没有测试所有这些字符。
答案 0 :(得分:4)
该文件未使用UTF7编写。 ' +'是UTF7编码方案中的一个特殊字符,用于表示"修改后的base64"序列。因此,当文件被读取为UTF7时,解码器会看到' +',需要修改的base64序列(但找不到),然后像往常一样继续解码文件。 ' +'结果会从输出中被抑制。
要解决您所看到的问题,您可能会尝试将文件读取为UTF8,或者您可以更新编写该文件的代码以确保它使用UTF7编码。