目标:在Windows中利用API来获得远端Linux的共享目录,该共享通过SMB服务来实现。远端目录使用utf-8编码,Windows端使用_findfirst, _findnext API来获取目录名,然后将utf-8转为gb2312后显示
问题:英文目录可以正常显示,中文目录会出现部分乱码。如下图所示:

正常的中文目录本该是:

用网络抓包工具抓到了SMB包,发现包中传递的字节是正确的,如下图,e5 88 98 e4 ba a6 e8 8f b2为“刘亦菲”三个字的utf-8编码:

在VC2005中编程,查看
struct _finddata_t FileFind;
struct _finddata64i32_t {
unsigned attrib;
__time64_t time_create; /* -1 for FAT file systems */
__time64_t time_access; /* -1 for FAT file systems */
__time64_t time_write;
_fsize_t size;
char name[260];}
查看name的内存值,为e5 88 98 e4 ba a6 e8 8f, 丢失了最后的b2
VC中的抓图:

VS2005中的相关代码如下:
struct _finddata_t FileFind;
ZeroMemory(&FileFind,sizeof(_finddata_t));
char ConstBuff[MAX_PATH];
strcpy(ConstBuff,Path);
int done=0,handle,id=1;
char FullPath[MAX_PATH] = "\\\\";
strcat(FullPath,Path);
strcat(FullPath,"/*.*");
if((handle=_findfirst(FullPath,&FileFind))==-1)
{
#ifdef DEBUG
printf("empty folder");
#endif
}
else
{
do
{
if(strcmp(FileFind.name,"..") || strcmp(FileFind.name,"."))
{
printf("%s\n",FileFind.name);
if ((_A_SUBDIR==FileFind.attrib))//folder
{
}
else
//file
{
}
#ifdef DEBUG
printf("%s\n",FileFind.name);
#endif
}
ZeroMemory(&FileFind,sizeof(_finddata_t));
}while(!(done=_findnext(handle,&FileFind)));
_findclose(handle);
}//end no empty else
疑问:为什么API获得的目录会比实际的丢了一个字节
希望能得到诸位高手的指点!不胜感激!
};