各位大侠: 
      菜鸟遇到的问题是这样的:现有一个二进制存储的文件,翻译成文本文件是俄文扩展ASCII码表(0x00-0x7F即为普通的ASCII表部分,0x80-0xFF是俄文的一些字母和符号)中的一些字符。首先将这个文件按照字节读取出来成一串无符号整型的数据肯定没有问题,但是在中文的操作系统下,如何把这些无符号整型的数对应的俄文字母或者符号写到记事本中,我查阅了好久都没有查到什么?     我估计这个东西的实现可能通过一个函数就行了,但是我确实没有找到这个函数是什么,惭愧!还请各位大侠指点一下迷津啊!! 
    我试着使用了UNICODE,但是也只知道一些初步的、理论性的东西,就以上问题如何操作不清楚。 
    也试过函数MultiBytetoWideChar函数,但是结果还是没有出来,不知道没有用对函数还是这个函数的使用方法不对。     同时想继续一个问题,就是我在中文操作系统下做一个界面,能否实现这个界面中既有中文,又有俄文,如何实现? 
    谢谢!!! 

解决方案 »

  1.   

    如果俄文字母直接在【128,255】之间,那么一定不是标准编码吧?这首先要看他的代码页是多少,再根据MultiBytesToWideChar来转换
      

  2.   

    没有所谓的额外扩展ascii码,英语之外的语言不是通过重用128-255字符来实现的,是需要复杂的定义来实现的,每个定义就称为一种编码或者一个代码页
      

  3.   

    现在这一块东西不清楚,代码页倒是知道是  OEM 866,但是这个函数MultiByteToWideChar函数不会使用,所以还请知道细致一点,因为小弟也是初学这个VC,再次先谢过啦!!
      

  4.   

    第一个问题,1楼的方法应该可行第二个问题,要同事支持两种以上非英文的语言,程序必须是支持unicode的,也就是定义了UNICODE这个宏。vs2005的工程默认会定义,VC60要自己添加
      

  5.   

    如问题中所说,UNICODE我已经自己添加了,但是如何操作不清楚。
    http://www.microsoft.com/globaldev/reference/oem/866.mspx#top
    这个是俄文对应的CODEPAGE。  codepage=866 俄文int MultiByteToWideChar(
      UINT CodePage,         // code page
      DWORD dwFlags,         // character-type options
      LPCSTR lpMultiByteStr, // string to map
      int cbMultiByte,       // number of bytes in string
      LPWSTR lpWideCharStr,  // wide-character buffer
      int cchWideChar        // size of buffer
    );上面是函数的MSDN介绍。
      

  6.   

    感谢前面几位大侠的帮忙,但是实质性的问题依然没有解决,还请各位继续不吝指点!!
    在线等答案ing
      

  7.   

    首先你必须了解文件是怎么生成的,二进制文件的格式是不固定的,因此你如果用错误的方式读出来,就可能不对第二,你说的俄文的代码页不一定是你实际使用的代码页,因此你必须了解生成这个文件的代码是用什么方式编码它的。文件是MBCS 还是Unicode的
    如果是MCBS的,MultiBytesToWideChar应该可以,只要你上面几个做的对的话
      

  8.   

    文件的内容我是已经知道的,通过uedit32在操作系统中俄语环境下可以看出来,意思也是对的。
    而且也与表http://www.microsoft.com/globaldev/reference/oem/866.mspx#top 
    相对应。         CFile fil("Russion.DAT",CFile::typeBinary|CFile::modeRead);
    CString str="";
    CString wstr=L"";
    for(int i=0;i<256;i++)
    {
    TCHAR s;
    fil.Read(&s,1);
    str=str+s;
    }
    MultiByteToWideChar(866,0,str.GetBuffer(256),-1,wstr.GetBuffer(256),-1);
    wstr.ReleaseBuffer();问题一是我不知道这个MultiByteToWideChar函数如何使用,
    如以上它就报错cannot convert parameter 3 from 'unsigned short *' to 'const char *'问题二还是最初的问题,界面中如何实现中俄英三种文字同现。
      

  9.   

    char str[256];
    WCHAR wstr[256];
    CFile fil("Russion.DAT",CFile::typeBinary|CFile::modeRead);
    file.Read(str,256);
    MultiByteToWideChar(866,0,str,-1,wstr,256,NULL,NULL);
    这样转换得到的wstr就是Unicode字符串,你可以创建一个TXT文件把字符串写进去,文件最开头要先写入0xfeff(两字节),这样记事本才能正常显示。
    界面使用Unicode字符就可以实现同时使用多种语言,但要注意系统中必须有所需的字体才能正常显示。
      

  10.   

    谢谢楼上大侠回复!
    由于本人学习MFC等时间尚短,虽然各位有提示,但是事情还是没有解决。所以恳请各位大侠能够更加细致的讲讲或者提供一些相关的资料,不胜感谢!!下面是我从其他地方看到的一点相关东西,一并发上来以方便有需要的人
    unicode打开并访问的方式 1.   必须以binary方式打开(Windows如此,unix不知道) 
    2.   文件开头必须以0xFF   0xFE开始 
    3.   文字转换成wchar后按照字节数组方式写入 
      

  11.   

    问题已经解决!codepage应该是1251.
    这里要感谢我的同学林zh老师帮忙解决这个问题,在确定这个codepage=1251时花了一个晚上的时间!同时也感谢坛子里热心的各位大侠!!
    结贴给分总结一下:简单说就是首先定义UNICODE和_UNICODE(方法前面有提到),然后读取的窄字符使用函数MultiByteToWideChar(1251,……)进行转换就行了