symbian os:分块儿读取文本中汉字被截断的问题(文字半角问题)
来源:互联网 发布:二叉树的层序遍历算法 编辑:程序博客网 时间:2024/05/16 00:27
笔者希望可以从文本中,将汉字读取出来,然后分段写到Editor内
无奈会出现文字半角问题。
汉字为2个字节,但是我们的RFile处理的都是8bit的流。使用RFile还有一个很重要的原因那就是。它提供了一个seek()很好用。
查了很多帖子。就目前的一个解决方案提出来。
直接上代码吧:
op_num++; _LIT(path,"C:\\ebooks.txt"); TInt zero=0; TText8 string[321]; TBuf8<320> rText; file.Seek(ESeekStart,currentPosition); file.Read(rText); Mem::Copy(string,rText.Ptr(),rText.Size()); string[rText.Size()]='\0'; HBufC16* msg = ToUnicodeConvertL(string); SetEditorText(*msg); iEditor->DrawDeferred(); delete msg; TInt iPos=PreToUnicodeConvertL(string); currentPosition=currentPosition+320-iPos;
HBufC16* CPlainTextEditorContainer::ToUnicodeConvertL(TText8* aOrigin) { CCnvCharacterSetConverter* converter=CCnvCharacterSetConverter::NewLC(); //RFs fSession; //需要打开文件服务器 //User::LeaveIfError(fSession.Connect()); //判断传入的源字符串是否GBK\GB2123码 if(converter->PrepareToConvertToOrFromL(KCharacterSetIdentifierGbk,CCoeEnv::Static()->FsSession())!=CCnvCharacterSetConverter::EAvailable) { //如果不是GBK\GBK2123码就退出 //fSessoin.Close(); CleanupStack::Pop(converter); delete converter; User::Leave(KErrNotSupported); } TText8* str = aOrigin; TInt state=CCnvCharacterSetConverter::KStateDefault; TPtrC8 source( str ); HBufC* iInfoText = HBufC::NewL( source.Length() ); TPtr16 ptr = iInfoText->Des(); if(CCnvCharacterSetConverter::EErrorIllFormedInput == converter->ConvertToUnicode(ptr, source, state)) User::Leave(KErrArgument); //转换完成并清除转换器 CleanupStack::PopAndDestroy(); return iInfoText; }TInt CPlainTextEditorContainer::PreToUnicodeConvertL(TText8* aOrigin) { CCnvCharacterSetConverter* converter=CCnvCharacterSetConverter::NewLC(); //RFs fSession; //需要打开文件服务器 //User::LeaveIfError(fSession.Connect()); //判断传入的源字符串是否GBK\GB2123码 if(converter->PrepareToConvertToOrFromL(KCharacterSetIdentifierGbk,CCoeEnv::Static()->FsSession())!=CCnvCharacterSetConverter::EAvailable) { //如果不是GBK\GBK2123码就退出 //fSessoin.Close(); CleanupStack::Pop(converter); delete converter; User::Leave(KErrNotSupported); } TText8* str = aOrigin; TInt state=CCnvCharacterSetConverter::KStateDefault; TPtrC8 source( str ); HBufC* iInfoText = HBufC::NewL( source.Length() ); TPtr16 ptr = iInfoText->Des(); TInt ipos=converter->ConvertToUnicode(ptr, source, state); CleanupStack::PopAndDestroy(); return ipos; }
代码中有一个currentPostion。他记录了当前位置。这位置不是随便取的。它保证了转换过程中,流的开头肯定不会发生截断。
如果发生截断,那肯定是在流的最后。然后对下一个读取位置进行相应的调整即可。
是否发生截断,是利用了API:TInt ipos=converter->ConvertToUnicode(ptr, source, state);
这个API的解释很多帖子都有提到。这里不再赘述。
缺点及未解决的问题:
1:由于从开头读取文本时。currentPostion为0.就保证了流的开头不会有截断。然后往后顺序截取转换。调整后都可以保证
currentPostion流的开头不会截断。笔者试着从当前位置往左截取一段。按照同样的原理来转换。但是效果不理想。
2:不能解决随机读得问题。
如果知道汉字边界检测的方法。就好办了。在网上查了一些。好像不多见。先使用这个方案吧。以后有更好的。再换。
- symbian os:分块儿读取文本中汉字被截断的问题(文字半角问题)
- symbian os:读取文本中汉字的实例
- 预先预告一片帖子吧(symbian中汉子编码分块儿截取乱码问题的解决)
- 汉字截断问题
- c# 导入excel (和文字被截断问题)
- 地址栏中“&”截断的问题
- socket传输汉字截断为乱码问题的解决
- socket传输汉字截断为乱码问题的解决 .
- 内容被截断的问题
- 读取Excel数据截断问题
- 解决Excel导入数据库时出现的文本截断问题
- 解决Excel导入数据库时出现的文本截断问题
- SSIS数据流中数据源发生长度被截断的问题
- iOS中UITextField的字数限制 emoji被截断问题
- sql中字符串被截断的问题调试
- iOS 从一串文字中找到某个文字,设置某文字的颜色/富文本问题
- java从Eclipse的Console中读取数据(尤其汉字)遇到的问题
- perl的dbi数据访问odbc读取sqlserver数据被截断的问题
- android.graphics.Camera实现图像的旋转、缩放,配合Matrix实现图像的倾斜
- asp.net性能优化
- 基于时间的备份保留策略的rman研究
- u-boot for tiny210 ver2.2.2(by liukun321咕唧咕唧)
- 【QQ登录】Android_SDK使用说明
- symbian os:分块儿读取文本中汉字被截断的问题(文字半角问题)
- u-boot for tiny210 ver3.0 (by liukun321咕唧咕唧)
- cck
- Hdu 1272 小希的迷宫
- 什麼是 views
- 数据挖掘:聚类分析
- 明星程序员的10种特质
- u-boot for tiny210 ver3.1 (by liukun321咕唧咕唧)
- 改造Kindeditor之:自定义图片上传插件。 外加给图片增加水印效果的选择。