EVC下UNICODE的字符串的输出问题
在开发PDA的测图系统中,EVC下的字符串的输出问题困扰了我好几天,在查阅网上相当一部分资料后,总算找到了个解决之道,但今天发现中文字符串却又出现问题,研究了一个下午,弄出了一个比较笨的方法,虽然效率不算高,但目前本人只能想到这样了。
以下是从网上摘抄资料
EVC在某种意义上说,相当于VC的一个子集。因为大多EVC有的功能,VC也具备,而VC有的功能,EVC则不一定拥有。在VC中,操作字符串很方便,因为WINDOWS的字处理能力实在是很强大,它支持多种字符集。我们随便使用一个CString str=“你好”,就要以输入我们想要的中文字符串。在EVC中这种情况有所改变,因为WINCE的字处理能力不够强大,它在处理汉字里统一将它示为UNICODE编码,所以我们在EVC中片理中文字符串时需要用到UNICODE编码。下面结合WINDOWS 下VC字符串的处理,对比一下EVC中文字符串的片理方法。
一、中文字符串定义
1、在VC中我们如果定义一个中文字符串,可以使用CString str=“你好”或LPCTSTR
2、在EVC中我们如果想定义一个中文字符串,可以使用如下方法:CString str=_T(“你好”)或者LPCTSTR
二、字符串操作
1、在VC中我们想拷贝字符串,可以作如下操作:
2、在VC中我们想在一个字符串中查找某个子串,只需要作下面的操作:
了解上述基本知识后,先说说我的情况吧,本人的系统由于是个测图系统,设计到点线面的坐标存储和注记(也就是文本)的存储,因为要把已经有的二进制数据存为明码TXT文件,要进行文件操作,本人采用的WIN32的文件操作函数
HANDLE hHandle =CreateFile(FileName,GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
CString str=L"LineBegin";
WriteFile(hHandle,str,str.GetLength()*sizeof(TCHAR),&cb,NULL);
注意上面的函数,str.GetLenth()*sizeof(TCHAR),因为unicode环境下是用的宽字符,写入的时候要占用双倍的空间,上面的函数本人在向文件写入数字和英文字符串时效果很好,运行也OK。但是在写入汉字时却发现生成的文件中汉字部分全市乱码,且原来格式优美的文本全成了每个字符之间都有一个小空格的情况。
上网找了很多资料,原来EVC下向文件写入中文时必须得把宽字符变成普通的ANSI的字符,采用WideCharToMultiByte()函数能够很好的实现,用该函数将宽字符转换为普通的ANSI字符,不管是中文还是英文抑或是中英混合的都可以很好的写入文件。
CString str = L"剑张三丰张放房间打扫test" ;
WriteFile(hHandle,str,str.GetLength()*sizeof(TCHAR),&cb,NULL);
以上两行代码却能将上面的字符串很方便的写入TXT文件中,且格式正确也没有乱码,如果str变量全是汉字的话却又成了乱码,如果中文字符很多的话也变成了乱码,郁闷。这个问题害得我今天比较两个程序费了不少时间。
void WriteString(HANDLE hHandle,CString str)
{
}
利用该函数就能方便的将一切格式的UNICODE字符转换为ANSI的了,明天开工。
注:以上函数代码都是在VS2005 VC++开发智能设备MFC程序中运行通过
发表评论 评论 (0 个评论)