【发布时间】:2011-05-30 12:39:06
【问题描述】:
当我使用标准 ofstream 输出文件时,它会在 Notepad++ 中显示 ASCII\ANSI 编码,我认为这是正常的,但我在 UCS-2 LE w/o BOM 中需要它。我不知道我应该在这段代码中更改什么 - 你能帮忙吗?
这是一种消息文件格式 (.vmg),在 UCS-2 LE 中使用字符编码,没有 BOM,这就是我想在 c++ 中创建的内容。
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int main()
{
double i,j;
stringstream sstream;
cout<<"Number Start from:";
cin>>i;
cout<<"\nNumber ends in:";
cin>>j;
for(i;i<=j;)
{
sstream <<i<<".vmg";
string ss = sstream.str();
ofstream sout(ss.c_str());
sout<<"BEGIN:VMSG"<<'\n'<<"VERSION:1.1"<<'\n'<<"X-IRMC-STATUS:"<<'\n'<<"X-IRMC-BOX:INBOX"<<'\n'<<"X-NOK-DT:20101224T190106Z"<<'\n'<<"X-MESSAGE-TYPE:SUBMIT"<<'\n'<<"BEGIN:VCARD"<<'\n'<<"VERSION:3.0"<<'\n'<<"N:"<<'\n'<<"TEL:"<<'\n'<<"END:VCARD"<<'\n'<<"BEGIN:VENV"<<'\n'<<"BEGIN:VCARD"<<'\n'<<"VERSION:3.0"<<'\n'<<"N:"<<'\n'<<"TEL:6969"<<'\n'<<"END:VCARD"<<'\n'<<"BEGIN:VENV"<<'\n'<<"BEGIN:VBODY"<<'\n'<<"Date:24.12.2010 19:01:06"<<'\n'<<"bid "<<i<<'\n'<<"END:VBODY"<<'\n'<<"END:VENV"<<'\n'<<"END:VENV"<<'\n'<<"END:VMSG"<<endl;
sstream.str("");
i=i+0.01;
}
return 0;
}
【问题讨论】:
-
您可能应该在输出行中包含“
<< endl”。您正在寻找的是平台相关的。 Notepad++ 的提及暗示了 Windows,UCS-2 LE 也是如此(可能应该是 UTF-16LE,尽管它们基本上是一样的)。您可能需要查看手册。这可能是不可能的;如果是这样,您可能需要打开宽字符编码,并且使用宽字符串文字 (L"Hello World") 会有所帮助,而不是阻碍。 -
这种不断不编写 BOM 以允许另一个读取文件的程序正确猜测编码的冲动是怎么回事?为什么不使用 EBCDIC?
-
实际上我想要的输出文件的字符编码是:UCS-2 LE w/o BOM.converting string to stream没有帮助,L“Hello World”也没有帮助。那么EBCDIC呢,如何这样做?
标签: c++ file byte-order-mark ofstream