코드/MFC

[MFC] 중국어 읽어오기 (unicode, utf-lf)

야곰야곰+책벌레 2022. 11. 23. 21:11
728x90
반응형

Unicode

유니코드는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준이다. 이는 유니코드 협회가 제정한다. 현재 컴퓨터에서 널리 사용되는 거의 모든 문자를 포함하며 110만 개 이상의 코드 포인트를 지정할 수 있다. 제록스와 애플의 공동 작업이 시초라 알려져 있다. 이후 여러 기업이 참여한 임시 위원회가 구성되었고 IBM와 Microsoft를 비롯한 다수의 기업이 참가하여 1991년에 유니코드 컨소시엄을 설립하였고 현재 주도적인 여러 IT 기업이 여기에 참여하고 있다.

 

Unicode 문서의 HeaderBOM(Byte Of Mark)을 확인하자

 

  BOMBye의 순서 표시다. Unicode의 파일이 시작되는 첫 부분에 보이지 않게, 2~3 Byte의 문자열을 추가하는데 이것을 BOM이라고 한다. Text Editor 화면에서는 보이지 않고, Hex Editor에서만 보인다.

형식 BOM
Little-endian FF FE
Big-endian FE FF
UTF-8 EF BB BF

다음과 같이 2BYTE를 읽어 little-endian인지 확인한다. 유니코드는 텍스트 파일로 읽고/저장할 때 제대로 동작하지 않기 때문에 _fgetws로 읽으면 이상한 글자가 읽히게 된다.

	//UniCode BOM 검사
	fread(&read_line, sizeof(wchar_t), 1, fp);
	if (read_line[0] != (wchar_t)0xFEFF)
	{
		fclose(fp);
		return;
	}

BOM 검사가 끝나면 fread로 나머지를 모두 읽은 후, 기존의 방식대로 substr 하여 사용하면 된다.

저장할 때에도 마찬가지로 선두에 유니코드를 나타내는 BOM을 작성해야 한다.

	//UniCode BOM 출력
	wchar_t head = 0xFEFF;
	fwrite((void *)&head, sizeof(wchar_t), 1, fp);

제대로 읽어오는 것을 볼 수 있다.

UnicodeTest.zip
0.14MB

728x90
반응형