일단 이것땜에 숙제, 턴프로젝트, 할일등 모두 내 팽겨쳐 졌다.. orz
유니코드는 이 아래에서 긁어온 자료와 같이 여러 종류가 있다고 한다.
하지만 지금 중요한건 저 글자를 파일로 저장한뒤 온전하게 불러오는데 목적이 있다.
예제는 한줄경우 어떻게 처리가 되었지만, 몇백줄 넘어가는 자료를 저장하면 그 나름대로 테크닉이
필요하다.
데브 피아 등 여러곳을 돌아다니가 결국 잘못된곳을 찾아냈다..
다음은 J-Notebook 프로그램의 파일 저장 소스 일부분이다.
if(dlg.DoModal() == IDOK)
{
CFile file;
CFileException e;
if(!file.Open(dlg.GetFileName(), CFile::modeWrite | CFile::modeCreate, &e))
{
e.ReportError();
return;
}
// 파일을 쓴다. 음... file.Write가 \n 이 자동으로 붙고, \r\n하면 한줄씩 내려준다.
// 유니코드 시작
WORD a;
a = 0xFEFF;
<- 16진수 변환 프로그램을 보니, 제대로 읽히는 파일은 FFFE로 시작한다.
하지만 FEFF로 넣었다.. 왜냐? 윈도우는 리틀 앤디안이기 떄문이라;;;
file.Write((void*)&a, sizeof(a));
// 맨 처음부분에 넣어준다. 왜인지 모르겠지만 아무래도 유니코드 식별인자 인거 같다;;
// 유니코드에서 한줄내림은 코드는 0x0a인듯 하다..
a = 0x0A;
JWord note;
CString strWord;
int i=0;
for(; i < pDoc->m_szNoteWord.size()-1; i++)
{
note = pDoc->m_szNoteWord[i];
strWord.Format(L"%s;%s;%s;%d\r",note.word, note.yomigana, note.mean, note.count);
// 글자를 쓰고,
file.Write(strWord, strWord.GetLength()* sizeof(wchar_t));
// 이 글자의 유니코드식별자? 를 추가해준다.. 파일흐름상 개행라인인거 같다.
file.Write((void*)&a, sizeof(a));
}
// 마지막은 개행할 필요가 없으므로 따로 써준다.
note = pDoc->m_szNoteWord[i];
strWord.Format(L"%s;%s;%s;%d",note.word, note.yomigana, note.mean, note.count);
file.Write(strWord, strWord.GetLength()* sizeof(wchar_t));
}
이짓을 해주면. CFile::typeText | CFile::modeRead 로 문제없이 읽어온다.
하지만... 유니코드... 이거 난해해서.. 괜한 지뢰밭 들어간건 아닌지 걱정된다.
'C/C++언어 > 유니코드' 카테고리의 다른 글
멀티바이트->유니코드 , 유니코드->멀티바이트 간단변환 (0) | 2010.02.01 |
---|---|
유니코드 정보 모음 (0) | 2007.11.18 |
유니코드의 사용법 (0) | 2007.09.06 |