首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用UTF-7忽略+字符的File.ReadAllText

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

Stack Overflow用户
提问于 2017-08-02 03:33:50
回答 1查看 657关注 0票数 1

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

我稍后将使用C#的File.ReadAllText(字符串路径,编码编码)来读取它,出于无关的原因,我们必须使用UTF7。

我们的代码看起来像这样:

代码语言:javascript
复制
var content = File.ReadAllText(fileName, Encoding.UTF7);

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

代码语言:javascript
复制
{ "commandValue": "testvalue + otherValue" }

变成了

代码语言:javascript
复制
{ "commandValue": "testvalue  otherValue" }

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

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

为了测试,我试着用

代码语言:javascript
复制
var content = File.ReadAllText(fileName, Encoding.UTF8);

它运行得很好。这些焦炭并没有消失。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-02 22:22:06

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

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45446274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档