전적으로 중국어 인 .txt 파일을 열려고합니다. 스트림이 100 % 유니 코드이거나 광범위한 문자를 처리하기위한 특별한 도구가 있더라도 일반 fopen/fclose 절차를 사용할 수 있습니까? 정답에 감사 드리며 초보 프로그래머입니다. 표준 gcc가있는 Linux를 사용하고 있습니다.순수 C로 유니 코드 파일 열기
내 코드를 첨부 하겠지만 오류없이 컴파일하지만 실행시 세그먼트 오류가 발생합니다. 나는 그것이 무엇이 잘못되었는지 모른다. 이 프로그램의 요점은 주어진 세트의 특정 기호가있는 중국어 기호의 각 문자열을 복사하고이를 별도의 파일에 쓰는 것입니다.
#include<stdio.h>
#include<stdlib.h>
#include<wchar.h>
#include <locale.h>
#define PLIK_IN in /*filenames*/
#define PLIK_OUT out
#define LKON 49 /*specifying the length of a string on the left from a desired sign*/
#define PKON 50 /*...and on the right*/
int wczytaj_pliki(FILE*, FILE*); /*open file*/
void krocz_po_pliku(FILE*, FILE*); /*search through file*/
int slownik(wchar_t); /*compare signs*/
void zapisz_pliki(FILE*, FILE*); /*write to file*/
void main(void)
{
FILE *bin,*bout;
setlocale(LC_CTYPE, "");
wczytaj_pliki(bin, bout);
krocz_po_pliku(bin, bout);
zapisz_pliki(bin, bout);
}/*main*/
int slownik(wchar_t znak) /*compare characters*/
{
wchar_t gznak1 = L'股', gznak2 = L'利', gznak3 = L'红';
if ((znak == gznak1) || (znak == gznak2) || (znak == gznak3)) return 1;
return 0;
}/*slownik*/
void krocz_po_pliku(FILE* bin, FILE* bout) /*search through file*/
{
wchar_t wch;
wchar_t* kontekst;
int i = 0, j, step = LKON, counter = 0, token = 0;
while ((wch = getwchar()) != EOF)
{
if (!token) /*comparing consecutive signs*/
{
if (slownik(wch) == 1)
{
counter++;
fprintf(bout,"###Wystapienie %d.\n\n", counter);
if (i<step) step = i;
fseek(bin,-step,1);
j=0, token = 1;
}/*if*/
else i++;
}/*if*/
else /*writing consecutive signs within context*/
{
if (j < LKON + PKON)
{
putwc(wch, bout);
j++;
}/*if*/
else
{
fprintf(bout,"###\n\n");
fflush(bout);
token = 0;
}/*else*/
}/*else*/
}/*while*/
printf("Znalazlem %d wystapien\n", counter);
}/*krocz_po_pliku*/
int wczytaj_pliki(FILE* bin, FILE* bout)
{
bin=fopen("PLIK_IN","r");
bout=fopen("PLIK_OUT","w");
rewind(bin);
if(bin==NULL || bout==NULL)
{
printf("Blad plikow\n");
exit(0);
}/*if*/
return 1;
}/*wczytaj pliki*/
void zapisz_pliki(FILE* bin, FILE* bout)
{
fclose(bin);
fclose(bout);
}
처음으로 중국어 문자 리터럴과 폴란드어 (?) 변수 이름의 조합을 처음 보았습니다. – dan04
유니 코드 100 %? 집중도가 아닌가요? 85 %의 유니 코드 만 보이는 파일은 어떻겠습니까? –