我用VS6的控制台写了一个这样的小程序:#include <iostream>
#include <fstream>
using namespace std;int main()
{
ofstream ofile;
wchar_t str[100];
swprintf(str,L"世界,你好");
cout<<str<<endl;
printf("%s\n",str);
ofile.open("out.txt");
ofile<<str<<endl;
ofile.close();
ofile.clear();
return 0;
}但是输入的结果却是:
0012FE20
NLu`O}Y
Press any key to continue在文件中的输出是:
0012FE20为什么会是这些东西?第一个是内存地址吗?第二个又是什么?
最重要的问题是:怎样才能输出wchar_t到文件?(要字符串内容)还有,怎样在控制台上显示wchar_t? 谢谢!
#include <fstream>
using namespace std;int main()
{
ofstream ofile;
wchar_t str[100];
swprintf(str,L"世界,你好");
cout<<str<<endl;
printf("%s\n",str);
ofile.open("out.txt");
ofile<<str<<endl;
ofile.close();
ofile.clear();
return 0;
}但是输入的结果却是:
0012FE20
NLu`O}Y
Press any key to continue在文件中的输出是:
0012FE20为什么会是这些东西?第一个是内存地址吗?第二个又是什么?
最重要的问题是:怎样才能输出wchar_t到文件?(要字符串内容)还有,怎样在控制台上显示wchar_t? 谢谢!
#include <fstream>
using namespace std;void main()
{
ofstream ofile;
wchar_t str[100];sprintf((char*)str, "%s\n", "世界,你好");printf("%s\n",str);}
冗余一堆
改:
----#include <stdio.h>void main()
{
wchar_t str[100];sprintf((char*)str,"%s", "世界,你好");printf("%s\n",str);
}
#include <windows.h>int _tmain(int argc, _TCHAR* argv[])
{
/*************************************************/
char scp[16];
UINT cp = GetACP();
sprintf(scp,".%d",cp);
setlocale( LC_ALL, scp );
wchar_t str[100];
swprintf(str,L"世界,你好");
printf("%ls\n",str);
/*************************************************/
FILE *fp = fopen("E:\\a.txt","wb");
if (fp)
{
fputc(0xFF,fp);
fputc(0xFE,fp);
fprintf(fp,"%s",str);
fclose(fp);
}
/*************************************************/
system("PAUSE");
return 0;
}1、被/*****/隔开的部分可自成一体,不存在依赖性。
2、第一个部分的%ls输出前,必须执行一次setlocale,用来告诉控制台默认的非unicode编码是哪种。这是因为控制台不能直接显示unicode字符,你用setlocale设定之后,以后使用%ls,它会帮你自动转换成你设定的编码显示出来。
3、unicode的文本文件头部多出两个字节,分别是FF、FE,这样的文件被记事本打开后,会自动以unicode显示。所以先写上FFFE,再以普通的内存数据写入文件即可。
至于unicode文件的头部的FFFE,则是无聊兴起要比较一下ANSI和unicode文件的区别,然后用UltraEdit十六进制显示的时候发现的。
估计不会有哪本书说这些的吧?
使用fprintf和%ls,去写入unicode字符,实际上真正写入文件的还是ANSI的,这种情况下,不先写入FFFE,就不会乱码。
但看你的要求似乎是要保存为UNICODE的文件,所以应该先写入FFFE,再配合使用fwprintf写入文件才对阿。
"wb"表示“二进制只写”方式打开文件。