有个unicode的程序在98简体中文跑,请问如何实现将editbox中输入的中文正确的写到指定的.txt(或其他)文件中啊?谢谢了(分不够另外加)急!请各位xdjm们帮帮忙!!!

解决方案 »

  1.   

    98不支持UNICODE
    EDITBOX写进去的应该是GB
    那你要写到TXT里还用GB好了
    程序里干脆不要用UNICODE了
    如果非要用
    那就转吧WINDOWS核心编程
    Windows 98不是一种全新的操作系统。它继承了1 6位Wi n d o w s操作系统的特性,它不是用
    来处理U n i c o d e的。如果要增加对U n i c o d e的支持,其工作量非常大,因此在该产品的特性列表
    中没有包括这个支持项目。由于这个原因, Windows 98像它的前任产品一样,几乎都是使用
    A N S I字符串来进行所有的内部操作的。
    仍然可以编写用于处理U n i c o d e字符和字符串的Windows应用程序,不过,使用Wi n d o w s函
    数要难得多。例如,如果想要调用C r e a t e Wi n d o w E x函数并将A N S I字符串传递给它,这个调用
    的速度非常快,不需要从你进程的默认堆栈中分配缓存,也不需要进行字符串转换。但是,如
    果想要调用C r e a t e Wi n d o w E x函数并将U n i c o d e字符串传递给它,就必须明确分配缓存,并调用
    函数,以便执行从U n i c o d e到A N S I字符串的转换操作。然后可以调用C r e a t e Wi n d o w E x,传递
    A N S I字符串。当C r e a t e Wi n d o w E x函数返回时,就能释放临时缓存。这比使用Windows 2000上
    的U n i c o d e要麻烦得多。本章的后面要介绍如何在Windows 98下进行这些转换。
    虽然大多数U n i c o d e函数在Windows 98中不起任何作用,但是仍有少数U n i c o d e函数确实非
    常有用。这些函数是:
    ■ E n u m R e s o u r c e L a n g u a g e s W ■ G e t Te x t E x t e n t P o i n t 3 2 W
    ■ E n u m R e s o u r c e N a m e s W ■ G e t Te x t E x t e n t P o i n t W
    E n u m R e s o u r c e Ty p e s W ■ L s t r l e n W
    ■ E x t Te x t O u t W ■ M e s s a g e B o x E xW
    ■ F i n d R e s o u r c e W ■ M e s s a g e B o x W
    ■ F i n d R e s o u r c e E x W ■ Te x t O u t W
    ■ G e t C h a r Wi d t h W ■Wi d e C h a r To M u l t i B y t e
    ■ G e t C o m m a n d L i n e W ■ M u l t iBy t e To Wi d e C h a r
    可惜的是,这些函数中有许多函数在Windows 98中会出现各种各样的错误。有些函数无法
    使用某些字体,有些函数会破坏内存堆栈,有些函数会使打印机驱动程序崩溃,等等。如果要
    使用这些函数,必须对它们进行大量的测试。即使这样,可能仍然无法解决问题。因此必须向
    用户说明这些情况。
      

  2.   

    NT以上操作系统的内核才支持Unicode的。
      

  3.   

    to:thisisll(速度八十迈)那你要写到TXT里还用GB好了请问能不能说详细点,谢谢了:)
      

  4.   

    你从EDITBOX里得到的数据
    原封不动的写进TXT
      

  5.   

    我试过,还是不行。(win98简体中文系统中试的,我没有2k中文,编译环境2k英文)
    比如说“我们”这个字符串,在.txt file中用2进制看到的是CE D2 C3 C7,但如果我用GETWINDOWTEXT从EDITBOX中将“我们”取出再存入.TXT FILE中,用2进制看到的却是11 62 EC 4E。我不是太明白?请问这是为什么啊?还有我如何才能在EDITBOX(98简体中文)中输入一些ASCII > 128的字符呢?
      

  6.   

    补充:我在98中使用的这个程序已经是UNICODE版本的了
      

  7.   

    这方面我也不清楚我想会不会是
    从EDITBOX进去的是GB
    然后你的程序当UNICODE处理了
    或者你程序用到一些UNICODE的东西,98不支持
    所以会数据会出错~~你在看看
    我跟你一起等高手来解决
      

  8.   

    我把editbox的字体改成支持unicode的了(我的程序也是UNICODE的,从EDITBOX上取值和设置值所用的函数也改写成UNICODE版本的了),但我把unicode的字符放到editbox上显示的却是'?' 为什么?UNICODE程序在98里面到底有没有实用效果啊?还有,98中的智能ABC究竟是如何将一些98简体中文ASCII CODE中部存在的符号打到EDITBOX中去的啊?有没有办法去伪造WM_IME_CHAR消息啊?帮帮我了,谢谢大家了!
      

  9.   

    要用先面的两个函数转换的MultiByteToWideChar 
    WideCharToMultiByte
      

  10.   

    还拿'我们'说
    GB编码是CE D2 C3 C7
    UNICODE是11 62 EC 4E
    所以说
    你进程序的时候是UNICODE
    98不支持
    所以写不对
    你输出到TXT的时候要转换
    就用楼上的函数
    TXT支持UNICODE(98不知道支持不,你可以试试)
    要在TXT文本开头写FF FE或FE FF(前面是小尾序后面是大尾序)
    后面写UNICODE的编码TXT就能认识了
    这部分知识可以在CSDN的文档里去搜索
      

  11.   

    我想楼上两位可能对我问题的理解有点偏差(我没讲清楚sorry!),我不光是将程序改成unicode的,我用的函数(如messgaebox, getwindowtext,setwindowtxt)也已经改写成unicode的了,所以说“我们”的编码是11 62 EC 4E是我想要看到的(先前我对此有点误会后来经 thisisll(速度八十迈) 提醒,将生成的.TXT FILE放到2k打开发现是正常的)。如果我再用MultiByteToWideChar&WideCharToMultiByte去转,那我先前的工作岂不是白做了:)我在想是不是有某种方法可以在98正确的识别出unicode。谢谢各位了!btw, 谢谢thisisll(速度八十迈)的关心。:)
      

  12.   

    仍然没有人能帮我吗?还是98的确不能识别unicode。如果真的不可以的话有没有一些较权威的说明或什么的……如果有方法的话还希望大家不吝赐教。谢谢!
      

  13.   

    你看看98下的TXT能存UNICODE不
    要是不能
    那肯定不能显示了现在已经很清楚了你是要在TXT里写UNICODE
    如果如上所说那就不能用TXT显示了
    非要用TXT显示的话,那就只能转成GB了要是用别的东西打开(浏览器...什么的)
    你可以看看人家程序支持不
    我想这个系统就没什么关系了
    人家程序支持的话自己会转
    不用你转
    如果不那你就要转
      

  14.   

    98要支持UNICODE的话,要先到微软网站上下一个 unicode的支持包 来安装。有几十,上百M呢。
      

  15.   

    是使用下面的函数处理,这个是同时支持MBCS和UNICODE的
        for (int i = 0; i < m_sTextEdit.GetLength(); i++)
        {//deal singlebyte char or double char,corresponding to the whole string
            if (m_sTextEdit.GetAt(i) >= 0) 
            {
                //single char
                nChar = m_sTextEdit.GetAt(i);

            }
    else
            {//double char
                int th = m_sTextEdit.GetAt(i);
                int tl = m_sTextEdit.GetAt(i + 1);
                nChar = ((th & 0x00ff)<<8) + (tl & 0x00ff);
            }
         i++;
         }