我在程序中寫入的磁盤上有一個文件,其中一些數據是用Json編碼的。使用UTF-7忽略+字符的File.ReadAllText
我使用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);
讀它,它工作得很好。 chars沒有消失。
我可能會做錯什麼,我怎麼能使File.ReadAllText(fileName,Encoding.UTF7)不忽略這些字符?
截至目前,我還沒有發現另一個字符有這個問題,但我顯然沒有測試所有這些。
你確定這個文件已經保存在utf上而不是unicode中嗎? – Gusman
'+'是UTF7中用來表示轉義序列的特殊字符。對@古斯曼來說,字符串可能不是使用UTF7編碼編寫的。當你以UTF7讀取它時,該'+'被視爲轉義序列的開始,但是沒有遇到有效的序列,所以UTF7編碼器只是'吃''+'。如果在文件中的每個加號之後加上' - ',UTF7解碼將正常工作(即所有的「+」變成「+ - 」)......至少對於這些加號來說。但主要問題是,字符串未使用UTF7編碼器寫入文件。 – wablab
@wablab我知道,這就是爲什麼我問... – Gusman