Symbian下Utf8和Unicode互换转存的一些总结
来源:互联网 发布:php简单工作流 编辑:程序博客网 时间:2024/05/22 06:53
Symbian下Utf8和Unicode互换转存的一些总结
1。读取Utf8文本转换后存储为Uncoide文本
(这里有个可以称为错误的问题,就是对于文件操作的原则就是用什么读就要用什么写,
所以file.Read(tp)与outputFileStream.WriteL(*unicode)结果正确但存在风险)
void Utf82Unicode()
{
RFs fs;
fs.Connect();
RFile file;
file.Open(fs, _L("c://data//utf8.txt"), EFileRead);
HBufC8* utf8 = NULL;
TInt size = 0;
file.Size(size);
utf8 = HBufC8::NewLC(size);
TPtr8 tp = utf8->Des();
file.Read(tp);
file.Close();
HBufC* unicode = CnvUtfConverter::ConvertToUnicodeFromUtf8L(tp);
file.Replace(fs, _L("c://data//unicode.txt"), EFileWrite);
CleanupClosePushL(file);
RFileWriteStream outputFileStream(file);
CleanupClosePushL(outputFileStream);
outputFileStream.WriteL(*unicode);
CleanupStack::PopAndDestroy(2); // outputFileStream, file
fs.Close();
CleanupStack::PopAndDestroy();
delete unicode;
}
2。读取Utf8文本转换后存储为Uncoide文本的第二种方法
TInt UnicodeLittleFromUnicodeBig(const TDesC& aBigDes,TDes8& aLittleDes)
{
RFs fs;
fs.Connect();
CCnvCharacterSetConverter* iConv = NULL;
iConv = CCnvCharacterSetConverter::NewLC();
if(NULL != iConv)
{
if(iConv->PrepareToConvertToOrFromL(KCharacterSetIdentifierUnicodeLittle,
fs)!=CCnvCharacterSetConverter::EAvailable)
{
fs.Close();
User::Leave(KErrNotSupported);
}
iConv->ConvertFromUnicode(aLittleDes, aBigDes);
CleanupStack::PopAndDestroy() ;
}
else
{
fs.Close();
return KErrNotSupported;
}
fs.Close();
return KErrNone;
}
void Utf82Unicode()
{
RFs fs;
fs.Connect();
RFile file;
file.Open(fs, _L("c://data//utf8.txt"), EFileRead);
HBufC8* utf8 = NULL;
TInt size = 0;
file.Size(size);
utf8 = HBufC8::NewLC(size);
TPtr8 tp = utf8->Des();
file.Read(tp);
file.Close();
HBufC* unicode = CnvUtfConverter::ConvertToUnicodeFromUtf8L(tp);
CleanupStack::PopAndDestroy();// utf8
HBufC8* unicode8 = HBufC8::NewL(unicode->Length() * 2);
TPtr8 tpUnicode8 = unicode8->Des();
UnicodeLittleFromUnicodeBig(*unicode, tpUnicode8);
delete unicode;
file.Replace(fs, _L("c://data//utf82unicode.txt"), EFileWrite);
CleanupClosePushL(file);
file.Write(*unicode8);
CleanupStack::PopAndDestroy(); // file
fs.Close();
delete unicode8;
}
3。读取Uncoide文本转换后存储为utf8文本
void UnicodeLittleToUnicodeBig(TDes& aBigDes, const TDesC8& aLittleDes)
{
RFs fs;
fs.Connect();
CCnvCharacterSetConverter* converter = CCnvCharacterSetConverter::NewLC();
if (converter->PrepareToConvertToOrFromL(KCharacterSetIdentifierUnicodeLittle,
fs) == CCnvCharacterSetConverter::EAvailable)
{
// Do nothing about it
}
TInt state = CCnvCharacterSetConverter::KStateDefault;
if (CCnvCharacterSetConverter::EErrorIllFormedInput
== converter->ConvertToUnicode(aBigDes, aLittleDes, state))
{
fs.Close();
CleanupStack::PopAndDestroy();
User::Leave(KErrArgument); // Leave if error in conversion.
}
CleanupStack::PopAndDestroy(); // Clean for converter
fs.Close();
}
void Unicode2Utf8()
{
RFs fs;
fs.Connect();
RFile file;
file.Open(fs, _L("c://data//unicode.txt"), EFileRead);
TInt size = 0;
file.Size(size);
HBufC8* unicode8 = HBufC8::NewL(size);
TPtr8 tpU8 = unicode8->Des();
file.Read(tpU8);
HBufC* unicode16 = HBufC::NewL(size);
//unicode16->Des().Copy(tpU8);
TPtr tpU16 = unicode16->Des();
UnicodeLittleToUnicodeBig(tpU16, *unicode8);
delete unicode8;
file.Close();
HBufC8* utf8 = HBufC8::NewL(size);
TPtr8 tpUtf8 = utf8->Des();
CnvUtfConverter::ConvertFromUnicodeToUtf8(tpUtf8, *unicode16);
file.Replace(fs, _L("c://data//unicode2utf8.txt"), EFileWrite);
file.Write(tpUtf8);
delete unicode16;
fs.Close();
}
4。读取Uncoide文本转换后存储为utf8文本的第二种方法参考1使用RFileReadStream继承与基类RReadStream中的ReadL(TDes16& aDes)读取文件来完成
- Symbian下Utf8和Unicode互换转存的一些总结
- GB2312, BIG5, UTF8, Unicode之间的互换
- 关于unicode、utf8、utf16、gb2312和GBK的一些理解
- 关于unicode、utf8、utf16、gb2312和GBK的一些理解
- unicode和utf8的关系
- unicode和utf8的区别
- Vc下unicode和UTF8相互转换
- Vc下unicode和UTF8相互转换
- 转码utf8 - unicode 和 unicode - utf8
- unicode和utf8编码的互相转换
- Unicode和UTF8之间的转换
- utf8和unicode编码的关系
- unicode和utf8之间的关系
- unicode和utf8之间的关系
- unicode和utf8之间的关系
- unicode和utf8之间的关系
- unicode和utf8之间的关系
- [转载]Javascript 实现gb2312和utf8编码的互换
- 著名物理学家张翼成担任百分点科技首席科学家
- Flash Socket 底层接受数据的初级处理(as3.0)
- GET POST 区别详解
- ARM仿真调试技术
- C++多线程(四)
- Symbian下Utf8和Unicode互换转存的一些总结
- 析构函数中抛出的异常
- 流与文件
- “为帮助内容存储区指定的位置无效或者您无权访问该位置”的解决办法
- 如何在面试中发现优秀程序员
- 态度决定一切
- C#之学习指南针
- perl中substr应用详解
- ecshop 呼叫中心模块发布