File.ReadAllText с UTF-7 игнорированием + символов
У меня есть файл на диске, который был записан программой, с некоторыми данными, закодированными в Json.
Я использую C# File.ReadAllText(путь строки, кодировка), чтобы прочитать его позже. По несвязанным причинам нам приходится работать с 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) не игнорировать эти символы?
На данный момент я не нашел другого персонажа с такой проблемой, но, очевидно, не проверял все из них.
1 ответ
Файл не пишется с использованием UTF7. "+" - это специальный символ в схеме кодирования UTF7, используемый для обозначения начала последовательности "модифицированной base64". Таким образом, когда файл читается как UTF7, декодер видит "+", ожидает измененную последовательность base64 (но не находит ни одной), а затем продолжает декодировать файл как обычно. "+" В результате подавляется с выхода.
Чтобы устранить возникшую проблему, вы можете попробовать прочитать файл как UTF8 или обновить код, записывающий файл, чтобы убедиться, что он использует кодировку UTF7.