Некоторые символы Юникода приводят к преждевременному сбою CStdioFile EOF.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Некоторые символы Юникода приводят к преждевременному сбою CStdioFile EOF.

Сообщение Anonymous »


Для файла UTF-16LE:

お客様番号: 123456789

Тот же просмотренный гексагон:

FF FE 4A 30 A2 5B D8 69 6A 75 F7 53 1A FF 20 00 BOM お 客 様 番 号 : космос 31 00 32 00 33 00 34 00 35 00 36 00 37 00 38 00 1 2 3 4 5 6 7 8 ... и т. д. И этот механизм чтения C++ MFC

CStdioFile cInFile; cInFile.Open("sample.txt", CFile::modeRead); БАЙТ lineOfFile[4096]; DWORD dwRead = cInFile.Read(lineOfFile, sizeof lineOfFile); [*]dwRead будет равно 12 (вместо ожидаемых 34). [*]И Read вызовет EOF. Это означает, что операция чтения прекратит чтение перед символом «:», как если бы она достигла конца файла. Любая дальнейшая попытка чтения этого потока вернет ноль.

По всей видимости, причиной является символ ":", который является полноширинным двоеточием. Значение Unicode и UTF-16LE: 0xFF1A. https://www.compart.com/en/unicode/U+FF1A

Я подозреваю, что «FF» вызывает что-то глубокое.

Но если я использую тип CFile вместо CStdioFile, он работает нормально.

Я не знаю, как предвидеть ошибку и выбрать лучший тип (поскольку в большинстве случаев мне нужен CStdioFile для управления сетевым чтением).
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»