Я всегда пытался заставить это работать.Предполагается, что программа принимает два аргумента: для размера буфера и другой для имени файла и преобразует этот файл из UTF-32 в UTF-8.Я использовал функцию fgetc (), чтобы заполнить массив int кодом Unicode.Я протестировал printint содержимое моего буфера, и в нем есть все эти нулевые символы вместо каждой кодовой точки.
Например, для файла, состоящего только из символа «A»: buffer [0] is0 буфер [1] равен 0 буфер [2] равен 0 буфер [3] равен 41
Конечные точки для всего, что выше U + 7F, в конечном итоге разделяются.
Вот код дляинициализация моего буфера:
int main(int argc, char** argv) {
if (argc != 3) {
printf("Must input a buffer size and a file name :D");
return 0;
}
FILE* input = fopen(argv[2], "r");
if (!input) {
printf("The file %s does not exist.", argv[1]);
return 0;
} else {
int bufferLimit = atoi(argv[1]);
int buffer[bufferLimit];
int charReplaced = 0;
int fileEndReached = 0;
int i = 0;
int j = 0;
while(1) {
// fill the buffer with the characters from the file.
for(i = 0; i < bufferLimit; i++){
buffer[i] = fgetc(input);
// if EOF reached, move onto next step and mark that
// it has finished.
if (buffer[i] == EOF) {
fileEndReached = 1;
break;
}
}
// output buffer of chars until EOF or end of buffer
for(j = 0; j <= i; j++) {
if(buffer[j] == EOF) {
break;
}
// check for Character Replacements
charReplaced += !convert(buffer[j]);
}
if(fileEndReached != 0) {
break;
}
}
//return a 1 if any Character Replacements were used
if(charReplaced != 0) {
return 1;
}
}
}