Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 写C++;文件采用UCS-2 LE中的流标准,无BOM编码_C++_File_Byte Order Mark_Ofstream - Fatal编程技术网

C++ 写C++;文件采用UCS-2 LE中的流标准,无BOM编码

C++ 写C++;文件采用UCS-2 LE中的流标准,无BOM编码,c++,file,byte-order-mark,ofstream,C++,File,Byte Order Mark,Ofstream,当我输出一个带有标准流的文件时,它在Notepad++中显示ASCII\ANSI编码,我认为这是正常的,但在UCS-2 LE w/o BOM中我需要它。我不知道我应该在这个代码中更改什么-你能帮我吗 这是一个消息文件格式(.VMG),它在UCS-2 LE W/O BOM中具有字符编码,这是我想在C++中创建的。 #include <iostream> #include <fstream> #include <sstream> using namespace

当我输出一个带有标准流的文件时,它在Notepad++中显示ASCII\ANSI编码,我认为这是正常的,但在UCS-2 LE w/o BOM中我需要它。我不知道我应该在这个代码中更改什么-你能帮我吗

这是一个消息文件格式(.VMG),它在UCS-2 LE W/O 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;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
双i,j;
溪流;
库蒂;
coutj;

for(i;iC++
std::string
s)没有显式编码(它们只是
char
的容器)

您需要确定以下几点:

  • 内部使用的编码
  • 外部使用的编码
然后你就会知道如何在两者之间转换

选择固定宽度的内部表示非常有用,例如
UTF-16
UTF-32
(从技术上讲,我知道
UTF-16
不是固定宽度,但
UCS-2
是固定宽度,而且足够接近)

外部表示不需要固定宽度,但您似乎需要UCS-2(UTF-16)。因此,如果您选择与外部格式匹配的内部格式,则不需要翻译,您只需将字符串输出到流

如果内部表示和外部表示之间存在差异(如LE->BE),则需要在两者之间进行转换。为此,请使用
codevt
刻面和
imbue
将文件流与适当的
区域设置
进行转换。可以在此处找到说明:

编辑: 您知道内部编码(因为您做出了选择)

外部编码:这将取决于文件:

如果您创建了该文件,您将知道其编码。如果另一个程序创建了该文件,您可能必须计算编码。例如,通过读取文件开头的(字节顺序标记)。这样,您可以判断它是
UTF-8
UTF-16LE
UTF-16BE
还是
UTF-32


如果是其他编码,那么可能更难尝试解决,或者你只需要猜测一下。

std::string
s没有显式编码(它们只是
char
的容器)

您需要确定以下几点:

  • 内部使用的编码
  • 外部使用的编码
然后你就会知道如何在两者之间转换

选择固定宽度的内部表示非常有用,例如
UTF-16
UTF-32
(从技术上讲,我知道
UTF-16
不是固定宽度,但
UCS-2
是固定宽度,而且足够接近)

外部表示不需要固定宽度,但您似乎需要UCS-2(UTF-16)。因此,如果您选择与外部格式匹配的内部格式,则不需要翻译,您只需将字符串输出到流

如果内部表示和外部表示之间存在差异(如LE->BE),则需要在两者之间进行转换。为此,请使用
codevt
刻面和
imbue
将文件流与适当的
区域设置
进行转换。可以在此处找到说明:

编辑: 您知道内部编码(因为您做出了选择)

外部编码:这将取决于文件:

如果您创建了该文件,您将知道其编码。如果另一个程序创建了该文件,您可能必须计算编码。例如,通过读取文件开头的(字节顺序标记)。这样,您可以判断它是
UTF-8
UTF-16LE
UTF-16BE
还是
UTF-32


如果是其他编码,可能更难尝试解决,或者你只需要猜测一下。

你可能应该包括“
为什么不写BOM让另一个读取文件的程序正确猜测编码?为什么不使用EBCDIC?实际上是我想要的输出字符编码文件为:UCS-2 LE w/o BOM。将字符串转换为流也无助于L“Hello World”是的。那EBCDIC呢,怎么做呢?你可能应该包括“
为什么不写BOM让另一个读取文件的程序正确猜测编码?为什么不使用EBCDIC?实际上我想要的输出文件字符编码是:UCS-2 LE w/o BOM。将字符串转换为流没有帮助或者我说“你好,世界”是的。那EBCDIC呢,怎么做呢?我不知道你对内部/外部编码的要求是什么。n如何知道是否有描述?我添加了我的源代码,请参见上文。谢谢链接。谢谢你马丁·约克,但现在我知道它是内部编码,那么我应该如何进行编码?我不知道。你给出的ink似乎无法证明其标题与输出相符。我不确定您对内部/外部编码的要求。n如何知道是否有描述符?我添加了源代码,请参见上文。感谢链接。谢谢Martin York,但现在我知道这是内部编码,那么我应该如何进行编码?我没有想法。你给出的链接似乎不能证明它的标题与输出相符。