ajh020797
asked on
gb2312 character set
I am trying to print some chinese characters within a static control. The characters are in gb2312 format and are stored within a file. The following code reads in the character but doesn't display the chinese character.
Anyone have any ideas ? I am using the win95 operating system.
static CFont newfnt;
CStatic* st=(CStatic*)GetDlgItem(ID C_MSG);
CFont* fnt=st->GetFont();
LOGFONT lf;
fnt->GetLogFont(&lf);
lf.lfCharSet=GB2312_CHARSE T;
strcpy(lf.lfFaceName ,"MS Song");
newfnt.CreateFontIndirect( &lf);
st->SetFont(&newfnt);
FILE* fh;
fh=fopen("c:\\temp\\test5. txt","rb") ;
char buf[3];
fread(buf,2,1,fh);
buf[2]='\0';
st->SetWindowText(buf);
Anyone have any ideas ? I am using the win95 operating system.
static CFont newfnt;
CStatic* st=(CStatic*)GetDlgItem(ID
CFont* fnt=st->GetFont();
LOGFONT lf;
fnt->GetLogFont(&lf);
lf.lfCharSet=GB2312_CHARSE
strcpy(lf.lfFaceName ,"MS Song");
newfnt.CreateFontIndirect(
st->SetFont(&newfnt);
FILE* fh;
fh=fopen("c:\\temp\\test5.
char buf[3];
fread(buf,2,1,fh);
buf[2]='\0';
st->SetWindowText(buf);
ASKER
I am using an english version of windows 95, I have installed the microsoft simplified chinese language pack/ime. I can view gb webpages ok, I can also enter chinese text using the ime within ie5 and word2000. I have tried to enter chinese characters into visual studio directly but this doesn't seem to work.
I do not know if your MS Song font on Win95 is the same font as I used
on Windows NT. The MS Song font I use is unicode TTF GB2312
Chinese font. You need to convert GB2312 codes to unicode first and
then reder with MS Song.
GB2312 are 2 BYTE 8bit codes, you may need to use unsigned char
or int array to store.
SetWindowsTextA may not work for 2 BYTE codes.
Ji.Zhang@nrc.ca
on Windows NT. The MS Song font I use is unicode TTF GB2312
Chinese font. You need to convert GB2312 codes to unicode first and
then reder with MS Song.
GB2312 are 2 BYTE 8bit codes, you may need to use unsigned char
or int array to store.
SetWindowsTextA may not work for 2 BYTE codes.
Ji.Zhang@nrc.ca
Try this:
lf.lfCharSet=GB2312_CHARSE T;
lf.lfOutPrecision = OUT_TT_PRECIS;
lf.lfClipPrecision = CLIP_TT_ALWAYS;
lf.lfQuality = PROOF_QUALITY;
lf.lfPitchAndFamily = VARIABLE_PITCH | FF_DONTCARE | TMPF_TRUETYPE;
strcpy(lf.lfFaceName ,_T("MS Song"));
newfnt.CreateFontIndirect( &lf);
lf.lfCharSet=GB2312_CHARSE
lf.lfOutPrecision = OUT_TT_PRECIS;
lf.lfClipPrecision = CLIP_TT_ALWAYS;
lf.lfQuality = PROOF_QUALITY;
lf.lfPitchAndFamily = VARIABLE_PITCH | FF_DONTCARE | TMPF_TRUETYPE;
strcpy(lf.lfFaceName ,_T("MS Song"));
newfnt.CreateFontIndirect(
ASKER
I tried the changes to the font but it doesn't seem to have worked.
I am led to believe that win95 is not a unicode based o/s so converting to unicode is not an option. Win95 only supports MBCS.
MS Office, Outlook ecpress, and internet explorer all seem to be able to display gb2312 and big5 encoded text withuot any problem on my system.
I am led to believe that win95 is not a unicode based o/s so converting to unicode is not an option. Win95 only supports MBCS.
MS Office, Outlook ecpress, and internet explorer all seem to be able to display gb2312 and big5 encoded text withuot any problem on my system.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thanks !! Finally I have a way to display these characters, all I need to do now if work out how to convert into unicode !
You need a table to convert from/to unicode/GB.
You may get my table gb2312.dat in uni03.zip at
http://www.zanmen.com/homepages/JiZhang/software/
gb2312.dat is ASCII file, which looks like:
....
f7e79e8b
f7e89e92
f7e993d6
f7ea9e9d
f7eb9e9f
f7ec9edb
f7ed9edc
...
read in format %4x%4x to gb_tab(i), uni_tab(i)
translation:
if you have a GB, then look up gb_tab() to get k, translate to the value in uni_tab(k)
Besides, ASCII char set is a sub-set of GB, you may need to deal with ascii
if you use mixed ascii+GB in your strings.
Which version OS are you using(English/Chinese)?
Have you tested st->SetWindowText("Chinese