支持UNICODE/UTF8/ANSI之间的转换的类
作者 佚名技术
来源 程序设计
浏览
发布时间 2012-06-30
{ // UNICODE Little endian pSourceStream->Position = 2; int iLength = pSourceStream->Size-2 ; wchar_t *szUnicode = new wchar_t[iLength+2]; memset(szUnicode, 0x00, iLength+2); pSourceStream->Read(szUnicode, iLength); WideString WideStr = WideString(szUnicode); DestText = WideStr; delete []szUnicode; szUnicode = NULL; break; } case uniUTF8: { // UTF8 pSourceStream->Position = 3; int iLength = pSourceStream->Size-3 ; char *szUTF8 = new char[iLength+3]; memset(szUTF8, 0x00, iLength+3); pSourceStream->Read(szUTF8, iLength); AnsiString Utf8Str = Utf8ToAnsi(szUTF8); // 本文转自 C++Builder研究 - http://www.ccrun.com/article.asp?i=1023&d=cbj0f7 if(Utf8Str == "") DestText = AnsiString((char*)pSourceStream->Memory); else DestText = Utf8Str; delete []szUTF8; szUTF8 = NULL; break; } case uniUTF8NOBOM: { // UTF8 没有头标识的情况。 int iLength = pSourceStream->Size; char *szUTF8 = new char[iLength+3]; memset(szUTF8, 0x00, iLength+3); pSourceStream->Read(szUTF8, iLength); AnsiString Utf8Str = Utf8ToAnsi(szUTF8); if(Utf8Str == "") DestText = AnsiString((char*)pSourceStream->Memory); else DestText = Utf8Str; delete []szUTF8; szUTF8 = NULL; break; } } return true; } //--------------------------------------------------------------------------- bool __fastcall ZUtf8_16::StreamSaveToFile(TMemoryStream *pStream, AnsiString FileNameA, EncodingType unicodeMode) { // TODO:把流内容按指定的格式保存到文件中。 try { pStream->Position = 0; switch(unicodeMode) { case uni8Bit: { // 什么都不做。直接保存。 pStream->SaveToFile(FileNameA); break; } case uni16BE: { // UC Big endian int iLength = pStream->Size ; char temp; char *pSource = new char[iLength+2]; memset(pSource, 0x00, iLength+2); pStream->Read(pSource, iLength); // 先看看转成的宽字节数返到nLen int nLen = MultiByteToWideChar( CP_ACP, 0, pSource, iLength, NULL, NULL ); LPWSTR lpwsz = new WCHAR[nLen]; MultiByteToWideChar( CP_ACP, 0, pSource, -1, lpwsz, nLen ); int iNewLen = lstrlenW(lpwsz) * sizeof(WCHAR); char *pDest = new char[iNewLen]; memcpy(pDest, lpwsz, iNewLen); // 只要把每两个字节的位置交换一下,就是UNICODE Big了。So... |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 用于计算四则混合运算表达式的递归函数第二版下一篇: 实例解析C++/CLI中的接口与泛型
关于支持UNICODE/UTF8/ANSI之间的转换的类的所有评论