Почему при хранении в памяти шов UTF8 переключается с 8 на 64-битный формат с дополнением? - PullRequest
0 голосов
/ 21 мая 2018

Извиняюсь за нудность вопроса, но я гонялся за своим хвостом в течение нескольких дней.

Мне нужно создать функцию, которая может проверить, является ли кодировка полученного буфера на самом деле UTF8, а затем сделатьбазовое регулярное выражение для исключения нежелательных контрольных символов.

Я начал с рекурсивного дампа:

     0x62     
     0xCDBC     
     0xE0AC89     
     0xF09F8489   

В тестовый файл.

Работал нормально, скопировал файл и текстредакторы из Windows, Linux и Mac могут читать его (и отображать правильные символы)

Но когда я пытаюсь прочитать его обратно в свою тестовую функцию, он умирает, добавляет

char c = fs->get();    
while(fs->good())
{     
     int len = sizeof(c);     
     printf("0x%X        ---    %i\n",c,len);     
     c = fs->get();     
}  

ДаЯ знаю, что код отстой ..

, но я не понимаю, почему я получаю это на выходе.

Hex                    sizeof()
0x26              ---    1     
0xFFFFFFCD        ---    1     
0xFFFFFFBC        ---    1    
0xFFFFFFE0        ---    1     
0xFFFFFFAC        ---    1     
0xFFFFFF89        ---    1     
0xFFFFFFF0        ---    1     
0xFFFFFF9F        ---    1     
0xFFFFFF84        ---    1     
0xFFFFFFB9        ---    1     

0x62 становится 0x26, в то время как все остальные числаверны, но дополняются 64-битным шаблоном ...?

локаль EN_en.utf8

Я заблудился, есть какие-нибудь идеи?

Заранее спасибо, Боб.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...