日期:2014-05-16  浏览次数:20623 次

【高手和版主帮忙啊】请教linux移植过程中二进制中文文件的乱码问题
我在把一个项目从windows移植到linux下,已经解决了所有的问题。
但通过测试确定了一个错误就是,原先在windows某配套程序生成的二进制文件A,要在我的程序中装载使用,里面有中文信息。
移植之后,将A文件放置在linux下读取,就发生了乱码。

请问高手朋友,如何解决啊,这方面一点经验都没有啊,多谢多谢了

附上读取函数:(windows下用这个函数读的,没有问题)

bool   CDictionary::Load(const   char   *pszFileName)//*pszFileName是文件A的名称
{
FILE   *fp;
Free();
if((fp=fopen(pszFileName, "rb "))==NULL)
return   false;   //fail   while   opening   the   file
fread(&m_nIndexSum,sizeof(int),1,fp);   //ܵ
m_pIndexTable=new   CIndexNode[m_nIndexSum];
for(int   i=0;i <m_nIndexSum;i++)
m_pIndexTable[i].ReadFile(fp);
fclose(fp);
return   true;
}

其中ReadFile函数是:
void   CDictionary::CIndexNode::ReadFile(FILE   *   fp)
{
fread(&m_nCountInArray,sizeof(int),1,fp);
if   (   m_nCountInArray   )
{
m_pWordArray=new   CDictWord[m_nCountInArray];
for   (   int   i=0;i <m_nCountInArray;i++   )
m_pWordArray[i].Read(fp);
}
}

------解决方案--------------------
你的文本是用什么编码的?GB还是UTF-8?
glib里有转换函数,转成UTF-8在GTK+里就可以正常显示。
------解决方案--------------------
怀疑跟系统是64位还是32位有关,不知你考虑这个因素没,int的长度是不同的