Отображать специальные символы в C - PullRequest
0 голосов
/ 05 мая 2011

У меня есть требование, когда код C извлекает строковые данные из базы данных и записывает их в файл. Строковые данные в базе данных могут содержать любые символы

например: Поле описания содержит данные "Adj \ 342 \ 200 \ 223 Data" , когда я записываю в файл текст, который он пишет как "Adj â Данные ". Точно так же это поле описания может содержать любые данные, мой код только что прочитал и использует strcpy после извлечения из базы данных и записи в файл.

Как получить данные, записанные в файл, как это есть в поле описания?

1 Ответ

2 голосов
/ 05 мая 2011

Подумайте, самое простое решение - записать побайтово - с буферизацией это не имеет большого значения:

int pos = 0;
FILE *fp = 0;
//...
fp = fopen("somefile.txt", "w");
//...
while(buffer[pos])
    if(buffer[pos] < 32 || buffer[pos] > 127) // change bounds for non-printable chars as you like
        fprintf(fp, "%c", buffer[pos++]);
    else
        fprintf(fp, "\\%u", buffer[pos++]);

Edit: Возможно, неправильно понял ваш вопрос. Используйте строковые функции только тогда, когда вы действительно работаете со строками. Для двоичных данных используйте двоичные функции (например, упомянутые memcpy()).

Изменить 2/3: Не печатайте значение как «% d» или «% u» - это должно быть «% 3o» для печати в виде 3-значного восьмеричного числа. Использование «% o» может быть небезопасно, если следуют другие цифры.

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