LINUX.ORG.RU

Как считать файл построчно/побайтово (очень глупый вопрос)


0

1

На с/c++ не писал года два или больше. Итак, глупый вопрос:

есть файл вида

<строкаюникодавutf8>\n\r
<строкаюникодавutf8>\n\r
<строкаюникодавutf8>\n\r
<строкаюникодавutf8>\n\r

Как его считать в c/c++? :)

Проблема в том, что при использовании fgets/fgetc() вместо двух байт для юникода, получается все 16. То есть что-то типа FFFFFFADFFFFFF1A вместо AD1A. На всякий случай: при просмотре файла в hexeditor'е четко видно AD1A Почему fgets/fgetc несет такую чушь, непонятно. fgetwc/s не предлагать, так как нужно именно побайтовое чтение каждой отдельной строки. setlocale (бредовая идея) не помогает.

fgetc возвращает int потому что.

fgetc() reads the next character from stream and returns it as an unsigned char cast to an int, or EOF on end of file or error.

Делайте проверку результата на EOF, если EOF — кидайте исключение/обрабатывайте ошибку, в противном случае возвращайте static_cast<unsigned char>(result).

sjinks ★★★ ()

fgets() не может так читать строку, что-то путаешь.

mashina ★★★★★ ()

Ты что-то путаешь. fgetc читает один _байт_ и возвращает его (либо возвращает EOF==-1). На юникод ему похрен. Тебе в данном случае тоже должно быть похрен.

legolegs ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.