c++ builder 中Ansi转换成Uicode txt文件
c++builder 中 默认是Ansi 编码格式的 如果我想把一段 String类型的编码 写到 txt文件中 该怎么做呢 本人新手 急用 在线等啊
[解决办法]
如果这段编码全部是Ansi 编码格式的,可用这个函数一个一个地转成UNICODE码然后存入文件
/************************************************************************/ /* Function Name : CFileOpt::Ansi2Unicode */ /* Description : Convert ANSI string to UNICODE string */ /* In : ansi. ansi string */ /* Return : return a pointer to unicode string if succeeds, */ /* return NULL if fails. */ /* Note : Free the returned string with "delete[]" */ /************************************************************************/ wchar_t * CFileOpt::Ansi2Unicode(const char *ansi) { assert (ansi != NULL); unsigned int len = strlen(ansi) + 1; wchar_t *unicode = new wchar_t[len]; if (NULL == unicode) return NULL; memset(unicode, 0, len * sizeof(wchar_t)); MultiByteToWideChar( CP_ACP, 0, ansi, len, unicode, len); return unicode; }
[解决办法]
我要是想 把返回的unicode 存入txt文件 加入文件流 是 out<<unicode吗?
[解决办法]
1.你所说的c++builder 中 默认是Ansi 编码格式的是针对BCB6版本的,BCB2009开始,默认就是unicode的
2.在bcb中,ansi转unicode很简单,直接赋值就可以了
AnsiString x="中国";
WideString y=x; //y 就是unicode的"中国"
3.bcb6的流不支持unicode,就是说你不能用
out<<unicode ; //无论unicode 是WideString 或wchar_t *
以下是测试:
AnsiString x="123中国"; WideString y=x; char buff[20]; int len; len= y.Length()*2; memcpy(buff,y.c_bstr(),len); ofstream out("d:\\temp\\aa.txt"); out << (char)0xff << (char)0xfe; //unicode文件头标识 for(int i=0;i<len;i++) out << buff[i];
[解决办法]
学习后给予标记.