WinCE中Unicode文本文档的编写

本文介绍如何在Windows CE系统环境下正确地创建Unicode编码的日志文件。重点讲解了Unicode与ANSI编码的区别,并提供了具体的代码示例,演示如何设置Unicode标志位并调整字符串写入长度。

在程序运行的时候通常要记录一些log文件,通常使用的方法是把程序运行信息输出到txt文本。

因为WinCE中使用的是Unicode,普通的windows,ANSI txt文本编写方法在WinCE中使用不了。

在WinCE之中,默认使用Unicode双字节编码而非传统系统的ANSI单字节,

因此在编写txt文本的时候,需要进行一些设置,才能无乱码的查看。

呵呵,说白了就是要写Unicode编码的TXT文本。

Unicode编码文本与ANSI编码文本的区别是:Unicode文本的前面两个字节内容是FF FE.

因此在WinCE创建文本的时候需要先写两个字节的内容FF FE,说明该文本是Unicode的。

然后在调用WriteFile的时候也需要注意一个地方,就是要写入字符串的长度。

由于Unicode是双字节的,而WriteFile是按字节计算的,因此写入的字符串要乘以2.

由于Windows是低字节在前,高字节在后的,因此如果设置Unicode标记则为

WORD wUnicodeFlag = 0xFEFF;

BOOL WriteToFile(LPCTSTR lpData) { BOOL bResult = FALSE; HANDLE hFile; DWORD dwByteWrite; TCHAR szBuf[256]; hFile = CreateFile(TEXT("\\RegRecord.txt"), GENERIC_READ | GENERIC_WRITE, 0, // Share mode NULL, // lpSecurityAttribute OPEN_ALWAYS, // Create disposition FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { StringCchPrintf(szBuf, 256, TEXT("WriteFile:%d"), GetLastError()); MessageBox(NULL, szBuf, TEXT("Error"), MB_ICONERROR); return bResult; } // Write the unicode flag if (GetLastError() != ERROR_ALREADY_EXISTS) { WORD wUnicodeFlag; wUnicodeFlag = 0xFEFF; if (!WriteFile(hFile, &wUnicodeFlag, sizeof(WORD), &dwByteWrite, NULL)) { StringCchPrintf(szBuf, 256, TEXT("WriteFile:%d"), GetLastError()); MessageBox(NULL, szBuf, TEXT("Error"), MB_ICONERROR); } } SetFilePointer(hFile, 0, NULL, FILE_END); if (!WriteFile(hFile, lpData, _tcslen(lpData)*sizeof(TCHAR), // bytes wait to write. &dwByteWrite, NULL)) { StringCchPrintf(szBuf, 256, TEXT("WriteFile:%d"), GetLastError()); MessageBox(NULL, szBuf, TEXT("Error"), MB_ICONERROR); } else { bResult = TRUE; } CloseHandle(hFile); return bResult; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值