Kai*_*Kid 1 c# encoding utf-8 utf-7
我在磁盘上有一个由程序写入的文件,其中一些数据以 Json 编码。
我正在使用 C# 的 File.ReadAllText(string path, Encoding encoding) 稍后读取它。由于无关的原因,我们必须使用 UTF-7。
我们的行看起来像这样:
var content = File.ReadAllText(fileName, Encoding.UTF7);
Run Code Online (Sandbox Code Playgroud)
它工作正常,先写后读,基本上我们需要的一切。唯一的例外是加号 (+)。如果我们的文件中有 + 号,此代码将返回整个字符串,忽略所有这些。所以
{ "commandValue": "testvalue + otherValue" }
Run Code Online (Sandbox Code Playgroud)
变成
{ "commandValue": "testvalue otherValue" }
Run Code Online (Sandbox Code Playgroud)
我检查了文件字节,+ 号确实是 char 0x2B,这是 UTF-7 中的正确字符(也是 UTF-8 中的相同字符,不确定是否重要)。
我无法弄清楚为什么它们在阅读时消失了。
为了测试,我试着用
var content = File.ReadAllText(fileName, Encoding.UTF8);
Run Code Online (Sandbox Code Playgroud)
它工作正常。字符没有消失。
我可能做错了什么,我怎么能让 File.ReadAllText(fileName, Encoding.UTF7) 不忽略这些字符?
到目前为止,我还没有发现另一个有这个问题的字符,但我显然没有测试所有的字符。
该文件不是使用 UTF7 写入的。'+' 是 UTF7 编码方案中的一个特殊字符,用于表示“修改后的 base64”序列的开始。因此,当文件被读取为 UTF7 时,解码器会看到“+”,期望修改后的 base64 序列(但没有找到),然后像往常一样继续解码文件。结果是从输出中抑制了“+”。
要解决您看到的问题,您可以尝试将文件读取为 UTF8,或者您可以更新写入文件的代码以确保它使用 UTF7 编码。
| 归档时间: |
|
| 查看次数: |
625 次 |
| 最近记录: |