C++ 如何在c++;?

C++ 如何在c++;?,c++,C++,。 我是C++新手。我必须找出用户传递的文件包含的编码类型。但我不知道如何检查文件的编码。所以我需要的是打印文件是unicode还是ansi或unicode big-endian还是utf8。我搜索了很多,但找不到解决方案。到目前为止,我所做的是打开一个文件: #include "stdafx.h" #include <iostream.h> #include <stdio.h> #include<conio.h> #include <fstream&g

。 我是C++新手。我必须找出用户传递的文件包含的编码类型。但我不知道如何检查文件的编码。所以我需要的是打印文件是unicode还是ansi或unicode big-endian还是utf8。我搜索了很多,但找不到解决方案。到目前为止,我所做的是打开一个文件:

#include "stdafx.h"
#include <iostream.h>
#include <stdio.h>
#include<conio.h>
#include <fstream>
using namespace std;



int _tmain(int argc, _TCHAR* argv[])
{
    fstream f;
    f.open("c:\abc.txt", fstream::in | fstream::out); /* Read-write. */


    getch();
    return 0;
}
#包括“stdafx.h”
#包括
#包括
#包括
#包括
使用名称空间std;
int _tmain(int argc,_TCHAR*argv[]
{
fsf;
f、 打开(“c:\abc.txt”,fstream::in | fstream::out);/*读写*/
getch();
返回0;
}
所以请告诉我这个问题的代码解决方案

如果我正在访问记事本文件怎么办

Thanx提前..

你不能

您可以做的最好的事情是将编码保存为文件结构的一部分(如果可以)。

您不能


您可以做的最好的事情是将编码保存为文件结构的一部分(如果可以)。

您无法知道文本文件的编码是什么。一种方法是在文件的开头查找BOM表,这将告诉您文本是否在。但是,BOM不是强制性的,因此您不能依靠它来区分Unicode与其他编码

提出这个问题的一个非常常见的方法是

我是西班牙人,在这里您可以很容易地找到7位ASCII、扩展ASCII、ISO-8859-1(又名拉丁语1,其中包括西欧所需的许多常见额外字符)以及各种风格的UTF文本文件


希望这能有所帮助。

您无法知道文本文件的编码方式。一种方法是在文件的开头查找BOM表,这将告诉您文本是否在。但是,BOM不是强制性的,因此您不能依靠它来区分Unicode与其他编码

提出这个问题的一个非常常见的方法是

我是西班牙人,在这里您可以很容易地找到7位ASCII、扩展ASCII、ISO-8859-1(又名拉丁语1,其中包括西欧所需的许多常见额外字符)以及各种风格的UTF文本文件


希望这能有所帮助。

文件通常用文件头表示编码。
正如其他人所建议的那样,您永远无法确定文件真正使用的编码是什么

通过以下链接了解大致情况:


文件通常用文件头表示编码。
正如其他人所建议的那样,您永远无法确定文件真正使用的编码是什么

通过以下链接了解大致情况:

如前所述,您唯一能做的就是按照最有可能抛出无效匹配项的最佳顺序进行猜测

您应该按以下顺序检查:

  • 开始时是否有UTF-16 BOM?那么可能是UTF-16。将BOM表用作大端还是小端的指示符,然后检查文件的其余部分是否符合
  • 开始时是否有UTF-8 BOM?那么可能是UTF-8。检查文件的其余部分
  • 如果上述操作没有导致正匹配,请检查整个文件是否有效UTF-8。如果是,可能是UTF-8
  • 如果以上没有导致正面匹配,则可能是ANSI
如前所述,您唯一能做的就是按照最有可能抛出无效匹配项的最佳顺序进行猜测

您应该按以下顺序检查:

  • 开始时是否有UTF-16 BOM?那么可能是UTF-16。将BOM表用作大端还是小端的指示符,然后检查文件的其余部分是否符合
  • 开始时是否有UTF-8 BOM?那么可能是UTF-8。检查文件的其余部分
  • 如果上述操作没有导致正匹配,请检查整个文件是否有效UTF-8。如果是,可能是UTF-8
  • 如果以上没有导致正面匹配,则可能是ANSI

在这里,我找到了一种检测记事本文件的方法,无论它是Unicode、Big-Endian、UTF8还是简单的ANSI文件:

我发现,当我在记事本中保存文件时,默认情况下,它会在文件的开头存储标记字节(BOM)。因此,我决定按照前面在这个问题中的建议使用它

首先,我读取文件的1字节。 我早就知道了 1.如果文件是Unicode文件,那么它的前两个字符存储FE FF,即254 255是它的十进制等价物。 2.若文件是UTF8文件,那个么它的第一个字符存储FF,239是它的十进制等价物

以下是代码:

#include<conio.h>
#include<stdio.h>
#include<string.h>
int main()
{
        FILE *fp=NULL;
        int c;
        int a[2];
        int i;
        fp=fopen("c:\\abc.txt","rb");

        if (fp != NULL)
        {
            while (i<=3)
            {
                        c = fgetc(fp);    
                        printf("%d",c);
                            if(c==254)
                            {
                                printf("Unicode Big Endian File");
                            }
                            else if(c==255)
                            {
                                printf("Unicode Little Endian File");
                            }
                            else if(c==239)
                            {
                                printf("UTF8  file");
                            }
                            else 
                            {
                                printf("ANSI File");
                            }

              }
              fclose(fp);

       }


        getchar();

    return 0;
}
#包括
#包括
#包括
int main()
{
FILE*fp=NULL;
INTC;
int a[2];
int i;
fp=fopen(“c:\\abc.txt”、“rb”);
如果(fp!=NULL)
{

(i在这里,我找到了一种检测记事本文件的方法,无论它是Unicode、Big-Endian、UTF8还是简单的ANSI文件:

我发现,当我在记事本中保存文件时,默认情况下,它会在文件的开头存储标记字节(BOM)。因此,我决定按照前面在这个问题中的建议使用它

首先,我读取文件的1字节。 我早就知道了 1.如果文件是Unicode文件,则其前两个字符存储FE FF,即254 255是其十进制等效项。 2.如果文件是UTF8文件,那么它的第一个字符存储FF,239是它的十进制等价物

以下是代码:

#include<conio.h>
#include<stdio.h>
#include<string.h>
int main()
{
        FILE *fp=NULL;
        int c;
        int a[2];
        int i;
        fp=fopen("c:\\abc.txt","rb");

        if (fp != NULL)
        {
            while (i<=3)
            {
                        c = fgetc(fp);    
                        printf("%d",c);
                            if(c==254)
                            {
                                printf("Unicode Big Endian File");
                            }
                            else if(c==255)
                            {
                                printf("Unicode Little Endian File");
                            }
                            else if(c==239)
                            {
                                printf("UTF8  file");
                            }
                            else 
                            {
                                printf("ANSI File");
                            }

              }
              fclose(fp);

       }


        getchar();

    return 0;
}
#包括
#包括
#包括
int main()
{
FILE*fp=NULL;
INTC;
int a[2];
int i;
fp=fopen(“c:\\abc.txt”、“rb”);
如果(fp!=NULL)
{

while(i)你不能只知道使用哪种编码,你只能预测它。你应该阅读以下内容:如果文件有BOM,使用BOM。如果没有,请询问用户。这是唯一确定的方法。@jonathan我如何检查文件中的BOM