我有一个UNICODE的DLG工程,上面有一个EDIT,两个按钮A,BA按下时,就从一个文本文件(X1.TXT)里面读一行内容(内容是中文的)显示到EDIT上;
B按下时,就把EDIT上的内容(也是中文)写入到一个文本文件中(X2.TXT)我的操作系统是日文WIN2000.
问题是:
工程运行后,A按下后,EDIT表示出来的内容是乱码!
而在EDIT中输入中文后,B按下,结果X2.TXT的里面的东西在中文系统上打开也是乱码!这个问题该如何才能解决?
即如何在A按下后,EDIT上能正确表示中文,
B按下后,写入的内容(X2.TXT)如何在中文系统在表示正确?注:只在中文系统上运行是没有问题的!
B按下时,就把EDIT上的内容(也是中文)写入到一个文本文件中(X2.TXT)我的操作系统是日文WIN2000.
问题是:
工程运行后,A按下后,EDIT表示出来的内容是乱码!
而在EDIT中输入中文后,B按下,结果X2.TXT的里面的东西在中文系统上打开也是乱码!这个问题该如何才能解决?
即如何在A按下后,EDIT上能正确表示中文,
B按下后,写入的内容(X2.TXT)如何在中文系统在表示正确?注:只在中文系统上运行是没有问题的!
解决方案 »
- MFC订座或者订票系统,如何实现多终端订票~?
- 窗口怎么带阴影
- 多线程编程遇到的问题
- 怎样在 MFC ODBC 编程中将ODBC 的版本设为odbc3.0啊
- Message Reflection for Windows Controls
- 纯dos程序和控制台程序有什么区别?
- CSocket的接收问题!
- bmp图像裁剪出问题啦..求大婶看下代码,问题出在哪...
- 请高手指教,socket文件传输缓冲区的问题
- 怎么利用递归遍历文件并把文件夹和文件插入到TreeCtrl内......求各位大神帮助,小弟第一次发帖求。。。
- 在Access97下能执行,为什么在Access2000下不能执行?
- 请教关于MFC ODBC的SQL执行问题,多指教!!!
LPSTR B2A(BSTR lp)
{
int nLen=(lstrlenW(lp)+1)<<1; LPSTR str=new char[nLen]; WideCharToMultiByte(CP_ACP, 0, lp, -1, str, nLen, NULL, NULL); return str;
}BSTR A2B(char * lp)
{
int nLen = strlen(lp)>>1-1; BSTR str = ::SysAllocStringLen(NULL, nLen);
MultiByteToWideChar(CP_ACP, 0, lp, -1, str, nLen); return str;
}void CUNICODEDlg::OnButtonA()
{
FILE* out;
unsigned char ch,ch1;
int i=0;
char name[100]; memset(name,0x0,100);
out = fopen("f:\\x1.txt", "rb");
while(!feof(out))
{
fread(&ch,sizeof(char),1,out);
if(ch==0x0D)
{
fread(&ch1,sizeof(char),1,out);
if(ch1==0x0A)
{
break;
}else{
fseek(out,-1,SEEK_CUR );
name[i]=ch;
i++;
}
}else{
name[i]=ch;
i++;
}
}
//m_txt是EDIT的变量
m_txt=A2B(&name[0]);
this->UpdateData(FALSE);
fclose(out);
}void CUNICODEDlg::OnButtonB()
{
FILE* out;
int i=0;
char *name=NULL;
out = fopen("f:\\x2.txt", "wb");
this->UpdateData(TRUE); name=B2A(m_txt.GetBuffer(m_txt.GetLength()));
fwrite(name,
strlen(name),1,out);
fclose(out);
}
用支持widechar的 fwprintf();fwscanf()...
尽量不要用WideCharToMultiByte这样函数自己转化~~~~
请问自己如何来转换?
为什么不用WideCharToMultiByte
MultiByteToWideChar
在不同语系的系统上是没有办法得到一样的结果的?
因为不同语系的系统上代码页不一样,但如果不用上面两个函数的话,
自己如何来进行转换?
好象要建张表来查什么的?那位能提供些资料也好啊!
删除与语言有关的代码。
中文代码是936.将这些关于语言的代码全删掉。应该在
什么语言环境下都可以运行把
谢谢,可惜不行的
_T(name)?
怎么转?
GB------UNICODE
它们是什么样的对应关系?解决问题我再加一百分答谢各位!请帮忙啊!
:-Dansi字符串能做的事,widechar字符串都可以做,而且速度更快~~~
文件是的ANSI的,内容是中文的,
操作系统在日文2000下,
最后还要把修改好的内容重新写回文件中去
所以必须要转来转去啊:(
2。用fwprintf();fwscanf()...读写文件~
用这些函数好像一样可以操作ansi的文本文件~~~搂住试一下?
好象没有什么影响setlocale(LC_ALL,"chs_china.936");
设定好后转换出来的结果还是不行!和没有使用的结果是一样的fwprintf();fwscanf()使用这两个函数读文件没有什么作用的,因为是ANSI文件,读出来后不会自动转换的,所以也是乱码是在日文2000下试的
用了setlocale就ok了setlocale(LC_ALL,"chs");日文2000下支持中文简体显示吗??你放到中文系统下看看~~~~~~
是的,总之在日文下中文内容转出来的结果不对!
在UNICODE工程下,EDIT控件可以正确显示中文的
在中文系统下是完全正确的同样,在中文系统下转换日文也是不对的
就算是用了setlocale也不行!你是在什么系统上试验的?
VERY GOOD!各位想知道如何才能实现吗?