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中会出现各种各样的错误。有些函数无法 使用某些字体,有些函数会破坏内存堆栈,有些函数会使打印机驱动程序崩溃,等等。如果要 使用这些函数,必须对它们进行大量的测试。即使这样,可能仍然无法解决问题。因此必须向 用户说明这些情况。
是使用下面的函数处理,这个是同时支持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);
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中会出现各种各样的错误。有些函数无法
使用某些字体,有些函数会破坏内存堆栈,有些函数会使打印机驱动程序崩溃,等等。如果要
使用这些函数,必须对它们进行大量的测试。即使这样,可能仍然无法解决问题。因此必须向
用户说明这些情况。
原封不动的写进TXT
比如说“我们”这个字符串,在.txt file中用2进制看到的是CE D2 C3 C7,但如果我用GETWINDOWTEXT从EDITBOX中将“我们”取出再存入.TXT FILE中,用2进制看到的却是11 62 EC 4E。我不是太明白?请问这是为什么啊?还有我如何才能在EDITBOX(98简体中文)中输入一些ASCII > 128的字符呢?
从EDITBOX进去的是GB
然后你的程序当UNICODE处理了
或者你程序用到一些UNICODE的东西,98不支持
所以会数据会出错~~你在看看
我跟你一起等高手来解决
WideCharToMultiByte
GB编码是CE D2 C3 C7
UNICODE是11 62 EC 4E
所以说
你进程序的时候是UNICODE
98不支持
所以写不对
你输出到TXT的时候要转换
就用楼上的函数
TXT支持UNICODE(98不知道支持不,你可以试试)
要在TXT文本开头写FF FE或FE FF(前面是小尾序后面是大尾序)
后面写UNICODE的编码TXT就能认识了
这部分知识可以在CSDN的文档里去搜索
要是不能
那肯定不能显示了现在已经很清楚了你是要在TXT里写UNICODE
如果如上所说那就不能用TXT显示了
非要用TXT显示的话,那就只能转成GB了要是用别的东西打开(浏览器...什么的)
你可以看看人家程序支持不
我想这个系统就没什么关系了
人家程序支持的话自己会转
不用你转
如果不那你就要转
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++;
}