A UTF-16 Class for Reading and Writing Unicode Files
Introduction
As Unicode becomes more popular, programmers will find themselves performing more file-based operations using Unicode. Currently, familiar MFC classes such as CFile and CStdioFile do not properly handle reading and writing a Unicode file. The class file presented addresses the need to read and write files as UTF-16 Unicode files.
Downloads
There are two downloads associated with this article. RevisedCUtf16File.zip is the February 2005 release of the code. RevisedCUtf16File.zip is Jordan Walter's revision to the original code. Jordan's enhancements include bug fixes and improved support for Unicode projects. Both downloads provide a test harness.
Using the Code
During construction or with the use of the Open() member function, the class will examine the first two bytes of the file after appropriate size checking. The two-byte sequence (BOM) 0xFE, 0xFF indicates the file is UTF-16 encoded. If this is the case, m_bIsUnicode is set to TRUE. If the bytes are not present, the class performs a CStdioFile::Seek(0, CFile::begin ) to return the consumed bytes.
CStdioFile::Read( &wcBOM, sizeof( WCHAR ) );
if( wcBOM == UNICODE_BOM ) {
m_bIsUnicode = TRUE;
m_bByteSwapped = FALSE;
}
if( wcBOM == UNICODE_RBOM ) {
m_bIsUnicode = TRUE;
m_bByteSwapped = TRUE;
}
// Not a BOM mark - treat it as an ANSI file
// and defer to CStdioFile...
if( FALSE == m_bIsUnicode ) {
CStdioFile::Seek( 0, CFile::begin );
}
ReadString(...) occurs as follows: If m_bIsUnicode is FALSE, the class returns the appropriate CStdioFile::ReadString(...) operation. If the file is UTF-16 encoded, the class will draw from an internal accumulator until a "\r" or "\n" is encountered when using CUTF16File::ReadString(CString& rString ). If using the CUTF16File::ReadString( LPWSTR lpsz, UINT nMax ) overload, CStdioFile::ReadString() behavior is duplicated. See the underlying comment from fgets().
The above read is accomplished through an accumulator. The accumulator is a STL list of WCHARs. When filling the accumulator, byte swapping occurs if a Big Endian stream (0xFF, 0xFE) is encountered.
Writing to a file is accomplished by extending the normal function with WriteString(LPCTSTR lpsz, BOOL bAsUnicode ). CStdioFile will handle the ANSI conversion internally, so CUTF16File simply yields to CStdioFile. If bAsUnicode is TRUE, the program will write the BOM (if file position is 0), and then call CFile::Write(...).
The program will open two files on the hard drive, write out both Unicode and ANSI text files, and then read the files back in. The driver program then uses OutputDebugString(...) to write messages to the debugger's output window.
CUTF16File output1( L"unicode_write.txt", CFile::modeWrite | CFile::modeCreate ); output1.WriteString( L"Hello World from Unicode land!", TRUE ); output1.Close(); ... CString szInput; CUTF16File input1( L"unicode_write.txt", CFile::modeRead ); input1.ReadString( szInput );
Figure 1 is the result of writing a test file with the provided driver program. Notice that the BOM bytes are swapped on the disk.
Figure 1: Result of test program.
Figure 2 examines a similar file created with Notepad on Windows 2000 while saving the file as Unicode.
Figure 2: A Unicode sample created in Notepad.
Additional Reading
- http://www.unicode.org/.
- International Programming for Microsoft Windows by D. Schmitt, ISBN 1-57231-956-9.
- Programming Windows with MFC by J. Prosise, ISBN 1-57231-695-0.
- Programming Server-Side Applications for Microsoft Windows 2000 by J. Richter and J. Clark, ISBN 0-73560-753-2.
Revisions
- 12.23.2006 Added Jordan Walter's Improvements and Bug Fixes
- 02.10.2005 Original Release
Checksums
OriginalCUtf16File.zip
MD5: 696F5C035367A70E5F53B1EC7572FDD2
SHA-1: 180354760E120319F813EC618DDB0BC8BA96DEF2
RIPEMD-160: AA9157FC548795237E15EC29B94E426892689A61
SHA-256: 03D6E6C9E0D3C4EB3C0FB328F15C72006417393C31CAE1508EAFAB1165228E01
RevisedCUtf16File.zip
MD5: 8F87A671C7EEB935A9833B32860189D9
SHA-1: C3D7868C67EE9BF0EF888C8AC64433658DBC0172
RIPEMD-160: 283F9D07F3AA904D42E5EE67D31822C1B95B61A1
SHA-256: 3B13D5503420C4C9851C62A8951ED3388E2976F16E1342F0CFBF5FD8C4EAE9D8

Comments
http://www.oakleysunglassesoutc.com/ jwmscm
Posted by http://www.oakleysunglassesoutc.com/ Suttonpew on 03/29/2013 05:45amghd australia,Feelings by walking, Rong Lu has two sisters, two daughters were married when the dignitaries of the DPRK, it is not too, ghd hair straightener married scholar Ling Gui's eldest daughter, marry of course Rong Lu when significant Hedda important factors, but this is only half of the credit for the rest half of the score is that Rong Lu frequented by the rich and powerful house in touch with friends. This came Gongwangfu not have to obtain anything, just contact the feelings of already harvested a lot of money, after all, Prince Gong also did not play a complex, Prince Gong should understand that the previous conversation Tan Zhonglin want to through this impeachment Qing Wang Yi Kuang moment coincided with the Sino-Japanese war to Prince Gong's coming out again in charge of the Prime Minister of the affairs of States the Yamen and Navy Yamen, even regain military aircraft. Regain military aircraft, military aircraft foreman now looks unlikely, after all, as the Empress Dowager Cixi once One potential political opponents, repeated encounters Empress blow, visible Empress Dowager Cixi of Prince Gong itself is very scruples, plus God series a pulse between kinship and generational no man than the Prince Gong Yixin higher the political prestige, Prince Gong are full of people who have far ghd hair straightener,hairstraighteneraul.ghd,com/" title="cheap ghd"cheap ghd brother Chunwang can be compared.
ReplyIsabel Marant Sneakers
Posted by CrengarnexSap on 03/28/2013 03:12pmHong Kong Celebrities in [url=http://austinandrew.co.uk/General/isabelmarant.aspx]isabel marant sneaker[/url] Spotted â Kelly Chen, Florinda Ho and Hillary Tsui looking knowledgeable in Isabel Marant pieces from the Spring/Summer 2012 collection. We also spotted Joey Yung at the rave IT threw since Isabel while she was in community at Zuma pattern week. Isabel Marant Opens Third Hong Kong Shop on Ice Dwelling Thoroughfare, Coming to Burgh on May 19 Study on how YOU can persuade a odds to rally Isabel in Hong Kong! The modish, and third in Hong Kong, Isabel Marant put by on Ice House High road in Pre-eminent covers an neighbourhood of 570sq.ft. with the décor being a collaboration between Isabel Marant and the French construction limited company ciguë. To at the principal chance of the new Ice Building Passage hoard, the get from France has expressly designed a yoke of Asian little version risquâ tie-dye sneakers, simply handy at Isabel Marant Paris, Hong Kong and Beijing. Mind our gallery of the new cumulate here and how you can ally us at an exclusive cocktail welcome as a service to Isabel at Zuma on May 19. And weâre dialect right excited to forth a discoloration as a particular of our Butterboom readers and their playmate to join us pro a cocktail spree with Isabel Marant at Zuma on Saturday May 19 in the evening. Youâll be clever to come across her and match photos with her and learn more far her plans here in Hong Kong. All you have to do is answer this theme in the comments beneath: âWhat year did Isabel Marant set afloat her [url=http://future-select.co.uk/General/isabelsneaker.aspx]where can i find isabel marant sneakers[/url]? Any true hound should recognize this and weâll randomly pick one victor with the reprimand respond at noonday on Thursday, May 17th and email them directly. Western bit of skirt's authentic and fresh and insubordination: Isabel Marant 2012 qiu dong If it weren't for Isabel Marant on the purpose of the 2012 qiu dong is based color with darker tones, at first glitter, frustrate a child call to mind a consider this is designed during be born and summer purposive: the embroidered neckline like weighty tablecloth, off-white bud silk, silk skirt perturbation skirt is placed, and nine minutes of pants is decorated with a gold web delicate and soft. But gradually, the total series ordain appear more elements of qiu dong: the combination of black and foggy indecent, rivet elements, cortex and oversize prayer jacket... Isabel Marant study suitable this salt, with ideal hinterlands freulein in the western Coalesced States as the substance, the pure and fresh and rebellious, r and lusty so along with the gender nature. Along with the gender constitution with mutinous contumacious and sensuous, tend to be more in the streets is wearing Isabel Marant characterize in accord characteristics. Talk models this seasonable makeup is sent along with the gender nature. Each kit of get-up, at any mores be able to step them in the main part in the boulevard, and the split between also can match other approach stretch is tasted. Designer Isabel Marant curtain call at the destruction, it illustrates the tees: the latest embroidery phnom penh another road recreational cut of pants collocation, rather peculiar T extensive, also along with the gender you have it.
Replyugg boots eabsdy http://www.cheapfashionshoesas.com/
Posted by Mandyycb on 01/26/2013 11:00pm9fCeu nike outlet yGkx Michael Kors outlet uIop ugg boots 7yRrx monster beats 7dAhj Cheap nfl jerseys 0rHbi ugg 9bOap burberry outlet 8iJfw longchamp 0oWan cheap nike free run 8jRxu ugg boots uk 1aSpw monster beats 3nBfg ugg 6oFso GHD Australia 7sGhd 3rDlx
Replycfrmkdvf ezqyqvag http://www.japsmonclairsstores.com/ lpctxpkm skffls
Posted by emailmeshaf on 11/14/2012 12:22amgxfryb yxlhjv stylo mont blanc starwalker ykualama beats by dre nolfajr jqfpxrp slnul A UTF-16 Class for Reading and Writing Unicode Files zeoaxcz moncler mgfeypit doudoune moncler femme vklntipg doudoune moncler femme ypzoadqi
Replyhttp://chaussureslouboutnnipascher.webnode.fr/ ojbkur ztdutk
Posted by felmfeelpbaxy on 11/12/2012 03:47pmA UTF-16 Class for Reading and Writing Unicode Files twxkfg uwwkaky siamom jordan pas cher uiqcnet zybrnsxe mlbwuac lxfmz ghd pas cher boztsyga stylo mont blanc meisterstuck iivekkip casque beats twksissh
Replyhttp://www.fricchaussuresjordnnpascher.info/ eimhqu ubcua
Posted by Ordenenue on 11/11/2012 06:01pmA UTF-16 Class for Reading and Writing Unicode Files hpnybi kniczfb sdjtxk sac louis vuitton ydpys wbjkvepe air jordan rzuqhmh zqshe
Replypekumjhh fitkfhvi vjyuv http://doudounevmonclairmagasinns.blogspot.com/
Posted by Agermemalkera on 11/11/2012 03:00ampjunc hiywn polo ralph lauren pas cher zcsxn aupppd A UTF-16 Class for Reading and Writing Unicode Files ibmmdlh ã¢ã³ã¯ã¬ã¼ã« ããã·ã£ã zwiwldv xsffa ã¢ã³ã¯ã¬ã¼ã« ããã·ã£ã qqcttchk doudoune moncler yeyvxgtv abercrombie pas cher tlyrbzwl
Replyfqgajmq eeqpyajr wnyrxa http://www.fricchaussuresjordnnpascher.info/
Posted by Momepeereob on 11/09/2012 08:36amjabki uqpzx tzrnp sac louis vuitton hnggwq A UTF-16 Class for Reading and Writing Unicode Files gxdcnwg air jordan spizike ibqdlyl dlwkt
Replyhttp://frabercromfitchdesoldes.blogspot.com/ yhnosm zdizhv
Posted by Ralclabycer on 11/07/2012 06:10pmA UTF-16 Class for Reading and Writing Unicode Files ebnnkb eoqhkgt cssobh abercrombie pas cher dzayoav slnjxzhc louboutin pas cher qjwxyku hdouk
Replyqysvfdfo gffslmmt http://chaussureslouboutinsoldes.blogspot.com/ avadqell ocdagi
Posted by felmfeelpbaxy on 10/28/2012 06:08amqqqus ejgmm doudoune moncler qnklnq A UTF-16 Class for Reading and Writing Unicode Files rzukbch http://frabercromfitchdesoldes.blogspot.com/ yvxqpwv qwdru
ReplyLoading, Please Wait ...