Clucene C++编码转换
在做Clucene与lucene生成的Index文件相互兼容时,遇到了编码转换问题。它们的兼容性对于非英文的编码可能都会存在这样的问题,经过跟踪clucene程序,发现它用的是unicode编码方式储蓄,因此,要先把字符串或文件转换成unicode编码,然后再进行其它处理。
转换的具体代码如下(Linux与vc6.0测试通过):
#ifndef _UNIX
static inline int codepage(const char* code_page)
{
return 936;//"GBK"
}
#endif
static inline int mb2wc(const char* code_page,/*in*/const char* in,int in_len,
/*out*/wchar_t* out,int out_max)
{
#ifdef _UNIX
size_t result;
iconv_t env;
env = iconv_open("WCHAR_T",code_page);
result = iconv(env,(char**)&in,(size_t*)&in_len,(char**)&out,(size_t*)&out_max);
iconv_close(env);
return (int) result;
#else
return ::MultiByteToWideChar(codepage(code_page),0,in,in_len,out,out_max);
#endif
}
static inline int wc2mb(const char* code_page,/*in*/const wchar_t* in,int in_len,
/*out*/char* out,int out_max)
{
#ifdef _UNIX
size_t result;
iconv_t env;
env = iconv_open(code_page,"WCHAR_T");
result = iconv(env,(char**)&in,(size_t*)&in_len,(char**)&out,(size_t*)&out_max);
iconv_close(env);
return (int) result;
#else
return ::WideCharToMultiByte(codepage(code_page),0,in,-1,out,out_max, NULL, NULL);
#endif
}
void str_to_UnicodeChar(const char* strIn,TCHAR* &strOut){
if(!strIn)
return;
int i= mb2wc("936",(char*)strIn, -1, NULL, 0);
strOut = (TCHAR*)malloc(sizeof(TCHAR)*i);
mb2wc("936",(char*)strIn, -1, strOut, i);
}
void UnicodeChar_to_str(const TCHAR* strIn,char* &strOut){
if(!strIn)
return;
int i = wc2mb("936",strIn,-1,NULL,0);
strOut = new char[i+1];
wc2mb("936", strIn, -1, strOut, i);
strOut[i] = 0;
}
void tchar_to_str(const const TCHAR* strIn ,char* &strOut){
int i=0;
if(!strIn)
return ;
strOut = new char[1024];
while(*strIn) {
strOut[i]=*strIn++;
i++;
}
strOut[i]='\0';
}
分享到:
相关推荐
CLucene是Lucene的一个C++端口,Lucene是一个基于java的高性能的全文搜索引擎。CLucene因为使用C++编写,所以理论上要比lucene快。
C++搜索引擎Clucene源码
大名鼎鼎的clucene,是lucene的c++ 版; CLucene README ============== ------------------------------------------------------ CLucene is a C++ port of Lucene. It is a high-performance, full-featured ...
CLucene 是C++版本的Lucene, .CLucene API文档地址:http://clucene.sourceforge.net/doc/html/index.html
CLucene类结构文档 内嵌源代码及各类关系图
用C++改写的Lucene
信息检索系统Lucene v2.3.3.4的C++开源代码。是学习信息检索,搜索引擎的杀手锏。
Clucene使用示例 用c++写的搜索引擎使用实例,简单明了,是一个非常好的学习资料
这是我学CLUCENE时期整理出来的几个不错的资料,我觉得里面总有一款会适合你,而且你所需要知道的技术里面基本上都是涵盖的,所以可以当作教材或者参考手册使用。(里面有CLUCENE,可以用的)
Clucene库,以及自己封装好的Clucene方法库。该库提供了可直接调用的用于建立索引,查询索引的接口。输出结果返回的是一个满足条件的文件链表。
对clucene的一些改进,能够处理中文字符
对clucene0.9.21版本在vc6下调试demo希望对你的开发有帮助
Lucene是apache组织的一个用java实现全文搜索引擎的开源项目。 其功能非常的强大,api也很简单。总得来说用Lucene来进行建立 和搜索和操作数据库是差不多的(有点像),Document可以看作是 数据库的一行记录,Field...
clucene2.3.3.4源码 CMake制作的,windows下的vs2013工程,编译通过,学习全文检索、搜索引擎的好资料
clucene-core-2.3.3.4版本,基于vs2012版,cmake出来的c++源码,内部的bin目录有编译好的动态库
09年最新源码,鼎力推荐,吐血推荐。非常好的东西,值得学习。
网上下载的代码在生成vs2005工程的时候包错,改动了下cmake的文件。成功生成了vs2005的工程。
上次那个库对应的.h和.lib忘了共享了。在这里补上
以前的资源vs2005是我本机生成的,直接用是没法用的。 上传个干净的,vs2005要自己生成,里面有个说明文档。
离线安装包,亲测可用