Кодировка в спринте - PullRequest
       2

Кодировка в спринте

3 голосов
/ 21 февраля 2012

В следующем коде:

char test[50];
sprintf(test, "áéíóú");

есть ли способ заставить sprintf интерпретировать вводимые символы как Windows-1252 вместо Unicode?Я имею в виду, чтобы test содержал 0xE1E9EDF3FA ... вместо 0xC3A1C3A9C3ADC3B3C3BA ...

Ответы [ 2 ]

3 голосов
/ 21 февраля 2012

Вы должны отредактировать это изнутри вашей программы редактирования текста. Это вопрос самого файла, который содержит ваш исходный код.

Для этого в большинстве редакторов и IDE есть меню ENCODING

РЕДАКТИРОВАТЬ: более конкретно для Geany, которая, как представляется, программное обеспечение, которое вы работаете, перейдите на:

Документ >> Установить кодировку >> Западноевропейский >> Западный (1252)

1 голос
/ 21 февраля 2012
#include <stdio.h>
#include <stdlib.h>

size_t utf2bin(unsigned char *dst, unsigned char *src, size_t dstlen);

int main (void)
{
unsigned char src[] = {0xC3, 0xA1, 0xC3, 0xA9, 0xC3, 0xAD, 0xC3, 0xB3, 0xC3, 0xBA, 0};
unsigned char dst[100];
size_t ret;

// ret = mbstowcs(dst,src, sizeof dst);
// ret = wcstombs(dst,src, sizeof dst);
ret = utf2bin(dst,src, sizeof dst);

printf("Src=%s.\n", src );
printf("Dst=%s.\n", dst );

return 0;
}

/* This code does not _interpret_ the utf8 code-points, only converts
** them to 8bit "characters" as used in the consumer-grade "operating systems" supplied by Microsoft.
**
** Warning: only two byte codes are handled here. Longer codes will produce erroneous output.
*/
size_t utf2bin(unsigned char *dst, unsigned char *src, size_t dstlen)
{
size_t pos;
for ( pos = 0; pos< dstlen; pos++ ) {
        if ((*src & 0xe0) == 0xc0) {
                dst[pos] = ((src[0] & 3) << 6) | (src[1] & 0x3f);
                src += 2;
                }
        else dst[pos] = *src++;
        }
if (pos && pos >= dstlen) pos--;
dst[pos] = 0;
return pos;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...